Do not RST_STREAM for DATA against nonexistent stream
This may be useful to the misbehaving implementation, but it could result in lots of RST_STREAM, so just ignore it for now.
This commit is contained in:
parent
a1dd866ebc
commit
a52ca391a2
|
@ -2605,10 +2605,15 @@ int nghttp2_session_on_data_received(nghttp2_session *session,
|
||||||
in this state it MUST respond with a stream error (Section
|
in this state it MUST respond with a stream error (Section
|
||||||
5.4.2) of type STREAM_CLOSED.
|
5.4.2) of type STREAM_CLOSED.
|
||||||
*/
|
*/
|
||||||
error_code = NGHTTP2_STREAM_CLOSED;
|
if(stream->state != NGHTTP2_STREAM_CLOSING) {
|
||||||
|
error_code = NGHTTP2_STREAM_CLOSED;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
error_code = NGHTTP2_PROTOCOL_ERROR;
|
/* This should be treated as stream error, but it results in lots
|
||||||
|
of RST_STREAM. So just ignore frame against nonexistent stream
|
||||||
|
for now. */
|
||||||
|
/* error_code = NGHTTP2_PROTOCOL_ERROR; */
|
||||||
}
|
}
|
||||||
if(error_code != 0) {
|
if(error_code != 0) {
|
||||||
r = nghttp2_session_add_rst_stream(session, stream_id, error_code);
|
r = nghttp2_session_add_rst_stream(session, stream_id, error_code);
|
||||||
|
|
|
@ -514,9 +514,11 @@ void test_nghttp2_session_recv_data(void)
|
||||||
CU_ASSERT(0 == ud.data_chunk_recv_cb_called);
|
CU_ASSERT(0 == ud.data_chunk_recv_cb_called);
|
||||||
CU_ASSERT(0 == ud.data_recv_cb_called);
|
CU_ASSERT(0 == ud.data_recv_cb_called);
|
||||||
item = nghttp2_session_get_next_ob_item(session);
|
item = nghttp2_session_get_next_ob_item(session);
|
||||||
CU_ASSERT(NGHTTP2_RST_STREAM == OB_CTRL_TYPE(item));
|
/* DATA against nonexistent stream is ignored for now */
|
||||||
|
CU_ASSERT(NULL == item);
|
||||||
|
/* CU_ASSERT(NGHTTP2_RST_STREAM == OB_CTRL_TYPE(item)); */
|
||||||
|
|
||||||
CU_ASSERT(0 == nghttp2_session_send(session));
|
/* CU_ASSERT(0 == nghttp2_session_send(session)); */
|
||||||
|
|
||||||
/* Create stream 1 with CLOSING state. DATA is ignored. */
|
/* Create stream 1 with CLOSING state. DATA is ignored. */
|
||||||
stream = nghttp2_session_open_stream(session, 1,
|
stream = nghttp2_session_open_stream(session, 1,
|
||||||
|
@ -1212,8 +1214,10 @@ void test_nghttp2_session_on_data_received(void)
|
||||||
CU_ASSERT(0 == nghttp2_session_on_data_received(session, 4096,
|
CU_ASSERT(0 == nghttp2_session_on_data_received(session, 4096,
|
||||||
NGHTTP2_FLAG_NONE, 6));
|
NGHTTP2_FLAG_NONE, 6));
|
||||||
top = nghttp2_session_get_ob_pq_top(session);
|
top = nghttp2_session_get_ob_pq_top(session);
|
||||||
CU_ASSERT(NGHTTP2_RST_STREAM == OB_CTRL_TYPE(top));
|
/* DATA against nonexistent stream is just ignored for now */
|
||||||
CU_ASSERT(NGHTTP2_PROTOCOL_ERROR == OB_CTRL(top)->rst_stream.error_code);
|
CU_ASSERT(top == NULL);
|
||||||
|
/* CU_ASSERT(NGHTTP2_RST_STREAM == OB_CTRL_TYPE(top)); */
|
||||||
|
/* CU_ASSERT(NGHTTP2_PROTOCOL_ERROR == OB_CTRL(top)->rst_stream.error_code); */
|
||||||
|
|
||||||
nghttp2_session_del(session);
|
nghttp2_session_del(session);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue