From 0a28b1ea0c674f7bcc7ad386abdcf963f9176475 Mon Sep 17 00:00:00 2001 From: William Lallemand Date: Fri, 31 Jan 2025 15:31:00 +0100 Subject: [PATCH] MEDIUM: htx: prevent to copy incomplete headers in htx_xfer_blks() Prevent a partial copy of trailers or headers when using the parameter. When using htx_xfer_blks(), transfering partial headers or trailers are prevented when restricted by the parameter. However using the parameter will still allow to do it. This patch changes the behavior by checking the type only after checking the headers/trailers type, so we can still rollback on partial transfer. No impact on the current code, which does not try to do that yet. --- src/htx.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/htx.c b/src/htx.c index 105b2ad60..e2a3ccd19 100644 --- a/src/htx.c +++ b/src/htx.c @@ -730,12 +730,6 @@ struct htx_ret htx_xfer_blks(struct htx *dst, struct htx *src, uint32_t count, break; } - if (type == mark) { - blk = htx_get_next_blk(src, blk); - srcref = dstref = NULL; - break; - } - /* Save to and to when we start * to xfer headers or trailers. When EOH/EOT block is reached, * both are reset. It is mandatory to be able to rollback a @@ -748,6 +742,12 @@ struct htx_ret htx_xfer_blks(struct htx *dst, struct htx *src, uint32_t count, } else if (type == HTX_BLK_EOH || type == HTX_BLK_EOT) srcref = dstref = NULL; + + /* allows a copy of the block which matched, then stop */ + if (type == mark) { + blk = htx_get_next_blk(src, blk); + break; + } } if (unlikely(dstref)) {