diff options
author | Valentin Bartenev <vbart@nginx.com> | 2014-03-26 18:01:11 +0400 |
---|---|---|
committer | Valentin Bartenev <vbart@nginx.com> | 2014-03-26 18:01:11 +0400 |
commit | de3c7a825ee446fe4e0dc84df3d57bfebdf8c6f6 (patch) | |
tree | 36537046b59992bc80135ed83d1fd3ba27896ada /src | |
parent | 042122a066c62cfe0748697d0f16b35fa96409c2 (diff) | |
download | nginx-de3c7a825ee446fe4e0dc84df3d57bfebdf8c6f6.tar.gz nginx-de3c7a825ee446fe4e0dc84df3d57bfebdf8c6f6.zip |
SPDY: better detect if headers block has wrong entries count.
Previously, only one case was checked: if there's more data to parse
in a r->header_in buffer, but the buffer can be filled to the end by
the last parsed entry, so we also need to check that there's no more
data to inflate.
Diffstat (limited to 'src')
-rw-r--r-- | src/http/ngx_http_spdy.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/http/ngx_http_spdy.c b/src/http/ngx_http_spdy.c index 3231b4673..9c80febaf 100644 --- a/src/http/ngx_http_spdy.c +++ b/src/http/ngx_http_spdy.c @@ -1196,10 +1196,10 @@ ngx_http_spdy_state_headers(ngx_http_spdy_connection_t *sc, u_char *pos, } } - if (buf->pos != buf->last) { - /* TODO: improve error message */ - ngx_log_debug3(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, - "end %ui %p %p", complete, buf->pos, buf->last); + if (buf->pos != buf->last || sc->zstream_in.avail_in) { + ngx_log_error(NGX_LOG_INFO, r->connection->log, 0, + "client sent SYN_STREAM frame " + "with invalid HEADERS block"); ngx_http_spdy_close_stream(sc->stream, NGX_HTTP_BAD_REQUEST); return ngx_http_spdy_state_protocol_error(sc); } |