changeset 6512:b5734248d5e7

FastCGI: skip special bufs in buffered request body chain. 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).
author Valentin Bartenev <vbart@nginx.com>
date Mon, 11 Apr 2016 18:42:34 +0300
parents 640288d0e1bc
children 80ba811112ed
files src/http/modules/ngx_http_fastcgi_module.c
diffstat 1 files changed, 5 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/http/modules/ngx_http_fastcgi_module.c
+++ b/src/http/modules/ngx_http_fastcgi_module.c
@@ -1177,6 +1177,11 @@ ngx_http_fastcgi_create_request(ngx_http
 
         while (body) {
 
+            if (ngx_buf_special(body->buf)) {
+                body = body->next;
+                continue;
+            }
+
             if (body->buf->in_file) {
                 file_pos = body->buf->file_pos;