]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: channel: inject output data at the end of output
authorChristopher Faulet <cfaulet@haproxy.com>
Tue, 7 Jan 2020 09:01:57 +0000 (10:01 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Tue, 7 Jan 2020 09:51:15 +0000 (10:51 +0100)
In co_inject(), data must be inserted at the end of output, not the end of
input. For the record, this function does not take care of input data which are
supposed to not exist. But the caller may reset input data after or before the
call. It is its own choice.

This bug, among other effects, is visible when a redirect is performed on
the response path, on legacy HTTP mode (so for HAProxy < 2.1). The redirect
response is appended after the server response when it should overwrite it.

Thanks to Kevin Zhu <ip0tcp@gmail.com> to report the bug. It must be backported
as far as 1.9.

src/channel.c

index d4a46ffeddd2d1675429a3df153774c9f6754c6b..8b0854ef5b42f60944faa11c67b06c90cc6a7666 100644 (file)
@@ -96,7 +96,7 @@ int co_inject(struct channel *chn, const char *msg, int len)
        if (len > max)
                return max;
 
-       memcpy(ci_tail(chn), msg, len);
+       memcpy(co_tail(chn), msg, len);
        b_add(&chn->buf, len);
        c_adv(chn, len);
        chn->total += len;