]> git.kaiwu.me - nginx.git/commitdiff
SPDY: fixed check for too long header name or value.
authorValentin Bartenev <vbart@nginx.com>
Fri, 7 Nov 2014 14:22:19 +0000 (17:22 +0300)
committerValentin Bartenev <vbart@nginx.com>
Fri, 7 Nov 2014 14:22:19 +0000 (17:22 +0300)
For further progress a new buffer must be at least two bytes larger than
the remaining unparsed data.  One more byte is needed for null-termination
and another one for further progress.  Otherwise inflate() fails with
Z_BUF_ERROR.

src/http/ngx_http_spdy.c

index ae95efd3511bb1c3130c897d3d8176027266034c..9cac691e036f16e76184fd0026d20dcb77c7ff25 100644 (file)
@@ -2660,10 +2660,10 @@ ngx_http_spdy_alloc_large_header_buffer(ngx_http_request_t *r)
     rest = r->header_in->last - r->header_in->pos;
 
     /*
-     * equality is prohibited since one more byte is needed
-     * for null-termination
+     * One more byte is needed for null-termination
+     * and another one for further progress.
      */
-    if (rest >= cscf->large_client_header_buffers.size) {
+    if (rest > cscf->large_client_header_buffers.size - 2) {
         p = r->header_in->pos;
 
         if (rest > NGX_MAX_ERROR_STR - 300) {