]> git.kaiwu.me - nginx.git/commitdiff
Fix ignored headers handling in fastcgi/scgi/uwsgi.
authorMaxim Dounin <mdounin@mdounin.ru>
Fri, 19 Aug 2011 20:11:39 +0000 (20:11 +0000)
committerMaxim Dounin <mdounin@mdounin.ru>
Fri, 19 Aug 2011 20:11:39 +0000 (20:11 +0000)
The bug had appeared in r3561 (fastcgi), r3638 (scgi), r3567 (uwsgi).

src/http/modules/ngx_http_fastcgi_module.c
src/http/modules/ngx_http_scgi_module.c
src/http/modules/ngx_http_uwsgi_module.c

index 71194fd20019e638f7b5c8b659ec9b8de02ebebb..0bc95f8da4a3e8c7c64e9e6afec9fe371593dcf1 100644 (file)
@@ -737,7 +737,15 @@ ngx_http_fastcgi_create_request(ngx_http_request_t *r)
         lowcase_key = NULL;
 
         if (flcf->header_params) {
-            ignored = ngx_palloc(r->pool, flcf->header_params * sizeof(void *));
+            n = 0;
+            part = &r->headers_in.headers.part;
+
+            while (part) {
+                n += part->nelts;
+                part = part->next;
+            }
+
+            ignored = ngx_palloc(r->pool, n * sizeof(void *));
             if (ignored == NULL) {
                 return NGX_ERROR;
             }
index c83d77044a1bb0425993ac0624851fcf7c5d4c89..a4230a956d636ac03cb824cbb9928b73bc8c1cca 100644 (file)
@@ -561,7 +561,15 @@ ngx_http_scgi_create_request(ngx_http_request_t *r)
         lowcase_key = NULL;
 
         if (scf->header_params) {
-            ignored = ngx_palloc(r->pool, scf->header_params * sizeof(void *));
+            n = 0;
+            part = &r->headers_in.headers.part;
+
+            while (part) {
+                n += part->nelts;
+                part = part->next;
+            }
+
+            ignored = ngx_palloc(r->pool, n * sizeof(void *));
             if (ignored == NULL) {
                 return NGX_ERROR;
             }
index a907e53b8ba00a25a7a44fc162dc0aeb78997e2c..37b763292f1eafe4ff4f1dba0a83f0828dddf42a 100644 (file)
@@ -589,7 +589,15 @@ ngx_http_uwsgi_create_request(ngx_http_request_t *r)
         lowcase_key = NULL;
 
         if (uwcf->header_params) {
-            ignored = ngx_palloc(r->pool, uwcf->header_params * sizeof(void *));
+            n = 0;
+            part = &r->headers_in.headers.part;
+
+            while (part) {
+                n += part->nelts;
+                part = part->next;
+            }
+
+            ignored = ngx_palloc(r->pool, n * sizeof(void *));
             if (ignored == NULL) {
                 return NGX_ERROR;
             }