Skip to content

Commit

Permalink
BUG/MEDIUM: mux-h2: Don't send CANCEL on shutw when response length i…
Browse files Browse the repository at this point in the history
…s unkown

Since commit 473e0e5 ("BUG/MINOR: mux-h2: send a CANCEL instead of ES on
truncated writes"), a CANCEL may be reported when the response length is
unkown. It happens for H1 reponses without "Content-lenght" or
"Transfer-encoding" header.

Indeed, in this case, the end of the reponse is detected when the server
connection is closed. On the fontend side, the H2 multiplexer handles this
event as an abort and sensd a RST_STREAM frame with CANCEL error code.

The issue is not with the above commit but with the commit 4877045
("MINOR: mux-h2: make streams know if they need to send more data"). The
H2_SF_MORE_HTX_DATA flag must only be set if the payload length can be
determined.

This patch should fix the issue haproxy#1992. It must be backported to 2.7.

(cherry picked from commit 462f522)
Signed-off-by: Willy Tarreau <w@1wt.eu>
  • Loading branch information
capflam authored and wtarreau committed Jan 17, 2023
1 parent 6efffd0 commit bbe4f7c
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion src/mux_h2.c
Original file line number Diff line number Diff line change
Expand Up @@ -6356,7 +6356,7 @@ static size_t h2_snd_buf(struct stconn *sc, struct buffer *buf, size_t count, in
if (!(h2s->flags & H2_SF_OUTGOING_DATA) && count)
h2s->flags |= H2_SF_OUTGOING_DATA;

if (htx->extra)
if (htx->extra && htx->extra != ULLONG_MAX)
h2s->flags |= H2_SF_MORE_HTX_DATA;
else
h2s->flags &= ~H2_SF_MORE_HTX_DATA;
Expand Down

0 comments on commit bbe4f7c

Please sign in to comment.