SPDY: fixed check for too long header name or value.

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.
This commit is contained in:
Valentin Bartenev 2014-11-07 17:22:19 +03:00
parent 42b6d57fb5
commit 20d41493d4

View 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; rest = r->header_in->last - r->header_in->pos;
/* /*
* equality is prohibited since one more byte is needed * One more byte is needed for null-termination
* 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; p = r->header_in->pos;
if (rest > NGX_MAX_ERROR_STR - 300) { if (rest > NGX_MAX_ERROR_STR - 300) {