]> git.kaiwu.me - nginx.git/commitdiff
FastCGI: f->split_parts reset on request start.
authorMaxim Dounin <mdounin@mdounin.ru>
Mon, 17 Mar 2014 11:34:36 +0000 (15:34 +0400)
committerMaxim Dounin <mdounin@mdounin.ru>
Mon, 17 Mar 2014 11:34:36 +0000 (15:34 +0400)
Additionally, make sure to check for errors from ngx_http_parse_header_line()
call after joining saved parts.  There shouldn't be any errors, though
check may help to catch bugs like missing f->split_parts reset.

Reported by Lucas Molas.

src/http/modules/ngx_http_fastcgi_module.c

index f386926da6466947e8b726aa0e6a067dc2a857ad..e2427b4a885cdc6f68bd9b5e3302f7e9e2a56752 100644 (file)
@@ -1195,6 +1195,10 @@ ngx_http_fastcgi_reinit_request(ngx_http_request_t *r)
     f->fastcgi_stdout = 0;
     f->large_stderr = 0;
 
+    if (f->split_parts) {
+        f->split_parts->nelts = 0;
+    }
+
     r->state = 0;
 
     return NGX_OK;
@@ -1475,6 +1479,13 @@ ngx_http_fastcgi_process_header(ngx_http_request_t *r)
 
                     rc = ngx_http_parse_header_line(r, &buf, 1);
 
+                    if (rc != NGX_OK) {
+                        ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
+                                      "invalid header after joining "
+                                      "FastCGI records");
+                        return NGX_ERROR;
+                    }
+
                     h->key.len = r->header_name_end - r->header_name_start;
                     h->key.data = r->header_name_start;
                     h->key.data[h->key.len] = '\0';