Lua Variable access bug?

lanshun zhou zls.sogou at gmail.com
Fri May 18 02:56:47 UTC 2012


Yeah, and it's not safe to save variable index in a global variable,
like ngx_http_userid_reset_index in userid filter module.

2012/5/18 Maxim Dounin <mdounin at mdounin.ru>:
> Hello!
>
> On Thu, May 17, 2012 at 04:35:24PM +0800, agentzh wrote:
>
>> On Wed, May 16, 2012 at 10:16 AM, Sirsiwal, Umesh <usirsiwal at verivue.com> wrote:
>> >
>> > I think issue exists because of the way ngx_http_variables_init_vars is
>> > written. It changes the flags in the static ngx_http_core_variables variable.
>> > During the first configuration read cycle where $http_host is indexed, the
>> > flag changes to indexed. During the second configuration read cycle where
>> > the the $http_host variable should not be indexed, the flags still remain
>> > INDEXED. That confuses ngx_http_get_variable later.
>> >
>>
>> This is indeed an issue in the nginx core and it should affect other
>> modules other than ngx_lua.
>>
>> I think the ngx_http_variables_add_core_vars function should pass a
>> copy of the ngx_http_variable_t entries in the static variable
>> ngx_http_core_variables.
>>
>> Could you please try the patch below for nginx 1.0.15? I've confirmed
>> that it can also be applied cleanly to nginx 1.2.0.
>>
>> Thanks!
>> -agentzh
>>
>> --- nginx-1.0.15/src/http/ngx_http_variables.c        2012-03-05
>> 20:36:51.000000000 +0800
>> +++ nginx-1.0.15-patched/src/http/ngx_http_variables.c        2012-05-17
>> 16:21:42.120968722 +0800
>> @@ -1898,6 +1898,7 @@
>>  {
>>      ngx_int_t                   rc;
>>      ngx_http_variable_t        *v;
>> +    ngx_http_variable_t        *value;
>>      ngx_http_core_main_conf_t  *cmcf;
>>
>>      cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module);
>> @@ -1918,7 +1919,14 @@
>>      }
>>
>>      for (v = ngx_http_core_variables; v->name.len; v++) {
>> -        rc = ngx_hash_add_key(cmcf->variables_keys, &v->name, v,
>> +        value = ngx_palloc(cf->pool, sizeof(ngx_http_variable_t));
>> +        if (value == NULL) {
>> +            return NGX_ERROR;
>> +        }
>> +
>> +        *value = *v;
>> +
>> +        rc = ngx_hash_add_key(cmcf->variables_keys, &value->name, value,
>>                                NGX_HASH_READONLY_KEY);
>>
>>          if (rc == NGX_OK) {
>
> Slightly modified version of this patch committed, thanks.
>
> Maxim Dounin
>
> _______________________________________________
> nginx-devel mailing list
> nginx-devel at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-devel



More information about the nginx-devel mailing list