]> git.kaiwu.me - nginx.git/commitdiff
Variables: fixed non-indexed access of prefix vars (ticket #600).
authorMaxim Dounin <mdounin@mdounin.ru>
Wed, 27 Aug 2014 17:38:04 +0000 (21:38 +0400)
committerMaxim Dounin <mdounin@mdounin.ru>
Wed, 27 Aug 2014 17:38:04 +0000 (21:38 +0400)
Previously, a configuration like

    location / {
        ssi on;
        ssi_types *;
        set $http_foo "bar";
        return 200 '<!--#echo var="http_foo" -->\n';
    }

resulted in NULL pointer dereference in ngx_http_get_variable() as
the variable was explicitly added to the variables hash, but its
get_handler wasn't properly set in the hash.  Fix is to make sure
that get_handler is properly set by ngx_http_variables_init_vars().

src/http/ngx_http_variables.c

index 1b61c39d46fb31964ae02fc746113c96e918b0d9..738f2237ac7fa7b801252ab02842c5821ceb39a5 100644 (file)
@@ -2511,8 +2511,7 @@ ngx_http_variables_init_vars(ngx_conf_t *cf)
 
             av = key[n].value;
 
-            if (av->get_handler
-                && v[i].name.len == key[n].key.len
+            if (v[i].name.len == key[n].key.len
                 && ngx_strncmp(v[i].name.data, key[n].key.data, v[i].name.len)
                    == 0)
             {
@@ -2524,6 +2523,10 @@ ngx_http_variables_init_vars(ngx_conf_t *cf)
 
                 av->index = i;
 
+                if (av->get_handler == NULL) {
+                    break;
+                }
+
                 goto next;
             }
         }