diff options
| author | nandsky <lishu.zy@alibaba-inc.com> | 2024-09-30 20:51:17 +0800 |
|---|---|---|
| committer | Roman Arutyunyan <arutyunyan.roman@gmail.com> | 2024-10-08 19:55:14 +0400 |
| commit | 3f6d94d8881ca6755b1baa4dd6248a7b7ed15735 (patch) | |
| tree | 79a3bec419dfabd35ab4b5bd4f7663c5f63141cc /src | |
| parent | 144778aee6e377c9bcd84368848b2e27871d570f (diff) | |
| download | nginx-3f6d94d8881ca6755b1baa4dd6248a7b7ed15735.tar.gz nginx-3f6d94d8881ca6755b1baa4dd6248a7b7ed15735.tar.bz2 | |
QUIC: prevent deleted stream frame retransmissions.
Since a2a513b93cae, stream frames no longer need to be retransmitted after it
was deleted. The frames which were retransmitted before, could be stream data
frames sent prior to a RESET_STREAM. Such retransmissions are explicitly
prohibited by RFC 9000, Section 19.4.
Diffstat (limited to 'src')
| -rw-r--r-- | src/event/quic/ngx_event_quic_ack.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/src/event/quic/ngx_event_quic_ack.c b/src/event/quic/ngx_event_quic_ack.c index c7ffd44dd..c953b8042 100644 --- a/src/event/quic/ngx_event_quic_ack.c +++ b/src/event/quic/ngx_event_quic_ack.c @@ -631,13 +631,12 @@ ngx_quic_resend_frames(ngx_connection_t *c, ngx_quic_send_ctx_t *ctx) case NGX_QUIC_FT_STREAM: qs = ngx_quic_find_stream(&qc->streams.tree, f->u.stream.stream_id); - if (qs) { - if (qs->send_state == NGX_QUIC_STREAM_SEND_RESET_SENT - || qs->send_state == NGX_QUIC_STREAM_SEND_RESET_RECVD) - { - ngx_quic_free_frame(c, f); - break; - } + if (qs == NULL + || qs->send_state == NGX_QUIC_STREAM_SEND_RESET_SENT + || qs->send_state == NGX_QUIC_STREAM_SEND_RESET_RECVD) + { + ngx_quic_free_frame(c, f); + break; } /* fall through */ |
