]> git.kaiwu.me - nginx.git/commitdiff
FastCGI: skip special bufs in buffered request body chain.
authorValentin Bartenev <vbart@nginx.com>
Mon, 11 Apr 2016 15:42:34 +0000 (18:42 +0300)
committerValentin Bartenev <vbart@nginx.com>
Mon, 11 Apr 2016 15:42:34 +0000 (18:42 +0300)
This prevents forming empty records out of such buffers.  Particularly it fixes
double end-of-stream records with chunked transfer encoding, or when HTTP/2 is
used and the END_STREAM flag has been sent without data.  In both cases there
is an empty buffer at the end of the request body chain with the "last_buf"
flag set.

The canonical libfcgi, as well as php implementation, tolerates such records,
while the HHVM parser is more strict and drops the connection (ticket #950).

src/http/modules/ngx_http_fastcgi_module.c

index a86120377374a94bfcbb9e6ee2b5a142ea481289..2d288ce93768894f914d8ef0798f98769e6c7d62 100644 (file)
@@ -1177,6 +1177,11 @@ ngx_http_fastcgi_create_request(ngx_http_request_t *r)
 
         while (body) {
 
+            if (ngx_buf_special(body->buf)) {
+                body = body->next;
+                continue;
+            }
+
             if (body->buf->in_file) {
                 file_pos = body->buf->file_pos;