SPDY: fixed the DATA frame length handling in case of some errors.

There are a few cases in ngx_http_spdy_state_read_data() related to error
handling when ngx_http_spdy_state_skip() might be called with an inconsistent
state between *pos and sc->length, that leads to violation of frame layout
parsing and resuted in corruption of spdy connection.

Based on a patch by Xiaochen Wang.
This commit is contained in:
Valentin Bartenev 2014-03-28 20:05:07 +04:00
parent de3c7a825e
commit afb92a8127

View File

@ -1528,7 +1528,6 @@ ngx_http_spdy_state_read_data(ngx_http_spdy_connection_t *sc, u_char *pos,
complete = 1;
} else {
sc->length -= size;
complete = 0;
}
@ -1571,6 +1570,8 @@ ngx_http_spdy_state_read_data(ngx_http_spdy_connection_t *sc, u_char *pos,
}
}
sc->length -= size;
if (tf) {
buf->start = pos;
buf->pos = pos;