# HG changeset patch # User Sergey Kandaurov # Date 1591379967 -10800 # Node ID 8fc9fcf18608df2f8275e0921c2a08d0d0caa308 # Parent 953cf44708b00f3422365f12d7368bce84162942 Stream ID handling in MAX_STREAM_DATA and STREAM_DATA_BLOCKED. diff --git a/src/event/ngx_event_quic.c b/src/event/ngx_event_quic.c --- a/src/event/ngx_event_quic.c +++ b/src/event/ngx_event_quic.c @@ -2875,6 +2875,14 @@ ngx_quic_handle_stream_data_blocked_fram ngx_quic_connection_t *qc; qc = c->quic; + + if ((f->id & NGX_QUIC_STREAM_UNIDIRECTIONAL) + && (f->id & NGX_QUIC_STREAM_SERVER_INITIATED)) + { + qc->error = NGX_QUIC_ERR_STREAM_STATE_ERROR; + return NGX_ERROR; + } + sn = ngx_quic_find_stream(&qc->streams.tree, f->id); if (sn == NULL) { @@ -2917,10 +2925,23 @@ ngx_quic_handle_max_stream_data_frame(ng ngx_quic_connection_t *qc; qc = c->quic; + + if ((f->id & NGX_QUIC_STREAM_UNIDIRECTIONAL) + && (f->id & NGX_QUIC_STREAM_SERVER_INITIATED) == 0) + { + qc->error = NGX_QUIC_ERR_STREAM_STATE_ERROR; + return NGX_ERROR; + } + sn = ngx_quic_find_stream(&qc->streams.tree, f->id); if (sn == NULL) { ngx_log_error(NGX_LOG_INFO, c->log, 0, "unknown stream id:%uL", f->id); + + if (f->id & NGX_QUIC_STREAM_SERVER_INITIATED) { + qc->error = NGX_QUIC_ERR_STREAM_STATE_ERROR; + } + return NGX_ERROR; }