Perl: NULL-terminate argument list.

perl_parse() function expects argv/argc-style argument list,
which according to the C standard must be NULL-terminated,
that is: argv[argc] == NULL.

This change fixes a crash (SIGSEGV) that could happen because
of the buffer overrun during perl module initialization.

Signed-off-by: Piotr Sikora <piotr@cloudflare.com>
This commit is contained in:
Piotr Sikora 2014-06-19 04:16:36 -07:00
parent 8f0f4c10e9
commit b3066b16e1

View File

@ -577,7 +577,7 @@ ngx_http_perl_create_interpreter(ngx_conf_t *cf,
n = (pmcf->modules != NGX_CONF_UNSET_PTR) ? pmcf->modules->nelts * 2 : 0;
embedding = ngx_palloc(cf->pool, (4 + n) * sizeof(char *));
embedding = ngx_palloc(cf->pool, (5 + n) * sizeof(char *));
if (embedding == NULL) {
goto fail;
}
@ -595,6 +595,7 @@ ngx_http_perl_create_interpreter(ngx_conf_t *cf,
embedding[n++] = "-Mnginx";
embedding[n++] = "-e";
embedding[n++] = "0";
embedding[n] = NULL;
n = perl_parse(perl, ngx_http_perl_xs_init, n, embedding, NULL);