From 7eeb10a5b5bc0c82b9ce200ee8c0588fede051f0 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Fri, 4 Jan 2019 09:28:17 +0100 Subject: [PATCH] MINOR: mux-h2: make HTX_BLK_EOM processing idempotent We want to make sure we won't emit another empty DATA frame if we meet HTX_BLK_EOM after and end of stream was already sent. For now it cannot happen as far as HTX is respected, but with trailers it may become ambiguous. --- src/mux_h2.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/mux_h2.c b/src/mux_h2.c index e192cb3926..4fcc339e0b 100644 --- a/src/mux_h2.c +++ b/src/mux_h2.c @@ -4563,8 +4563,16 @@ static size_t h2s_htx_frt_make_resp_data(struct h2s *h2s, struct buffer *buf, si count--; goto end; } - - if (type != HTX_BLK_DATA && type != HTX_BLK_EOM) + else if (type == HTX_BLK_EOM) { + if (h2s->flags & H2_SF_ES_SENT) { + /* ES already sent */ + htx_remove_blk(htx, blk); + total++; // EOM counts as one byte + count--; + goto end; + } + } + else if (type != HTX_BLK_DATA) goto end; /* Perform some optimizations to reduce the number of buffer copies.