]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: httpclient: Don't use co_set_data() to decrement output
authorChristopher Faulet <cfaulet@haproxy.com>
Fri, 29 Apr 2022 12:09:03 +0000 (14:09 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Fri, 29 Apr 2022 12:12:42 +0000 (14:12 +0200)
The use of co_set_data() should be strictly limited to setting the amount of
existing data to be transmitted. It ought not be used to decrement the
output after the data have left the buffer, because doing so involves
performing incorrect calculations using co_data() that still comprises data
that are not in the buffer anymore. Let's use c_rew() for this, which is
made exactly for this purpose, i.e. decrement c->output by as much as
requested.

src/http_client.c

index f99bdae8a30f0a6d7acb04055ab7ed18e6bcfbf2..e12d556e0ffe7d8864cc8ecb042a82723f86884a 100644 (file)
@@ -765,7 +765,7 @@ static void httpclient_applet_io_handler(struct appctx *appctx)
                                hc->res.vsn = istdup(htx_sl_res_vsn(sl));
                                hc->res.reason = istdup(htx_sl_res_reason(sl));
                                sz = htx_get_blksz(blk);
-                               co_set_data(res, co_data(res) - sz);
+                               c_rew(res, sz);
                                htx_remove_blk(htx, blk);
                                /* caller callback */
                                if (hc->ops.res_stline)