Hi Folks,

We recently started using Sentry (static analysis tool) to analyze
apache httpd on a nightly basis. Sentry found a potential unintialized
variable in mod_data.c added in commit 1133582.

I'm not sure if this case is actually possible at runtime, but
I'll describe it here. Note, you can view the file I'm talking
about here,
http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/filters/mod_data.c?revision=1133582&view=markup&pathrev=1133582

static apr_status_t data_out_filter(...
{
    ...
    if (!ctx) {
        ...
        // EVENT 1: charset is uninitialized
        char *charset;
        ...
        // EVENT 2: Take false path here
        if (!ap_is_initial_req(f->r)) {
            ap_remove_output_filter(f);
            return ap_pass_brigade(f->next, bb);
        }
        ...
        type = apr_pstrdup(r->pool, r->content_type);
        // EVENT 3: take false path here
        if (type) {
            charset = strchr(type, ' ');
            if (charset) {
                *charset++ = 0;
                end = strchr(charset, ' ');
                if (end) {
                    *end++ = 0;
                }
            }
        }

        // EVENT 4: charset is used uninitialized.
        // If it's possible to reach this case, you could potentially
        // pass bogus data into the second %s.
        apr_brigade_printf(ctx->bb, NULL, NULL, "data:%s%s;base64,",
                type ? type : "", charset ? charset : "");

If this case is reachable, I would suggest a patch like this:

- char *charset;
+ char *charset = 0;
                                                                                
         
Thanks,                                                                         
         
Chris                                                                           
         

-- 
Chris Wilson
http://vigilantsw.com/
Vigilant Software, LLC

Reply via email to