diff --git a/src/htx.c b/src/htx.c index 3cc1a34b0..7e5bd4618 100644 --- a/src/htx.c +++ b/src/htx.c @@ -336,7 +336,7 @@ struct htx_blk *htx_remove_blk(struct htx *htx, struct htx_blk *blk) enum htx_blk_type type; uint32_t pos, addr, sz; - BUG_ON(htx->head == -1); + BUG_ON(!blk || htx->head == -1); /* This is the last block in use */ if (htx->head == htx->tail) { @@ -739,12 +739,14 @@ struct htx_ret htx_xfer_blks(struct htx *dst, struct htx *src, uint32_t count, } if (unlikely(dstref)) { - /* Headers or trailers part was partially xferred, so rollback the copy - * by removing all block between and , both included. + /* Headers or trailers part was partially xferred, so rollback + * the copy by removing all block between and , + * both included. may be NULL. */ while (dstref && dstref != dstblk) dstref = htx_remove_blk(dst, dstref); - htx_remove_blk(dst, dstblk); + if (dstblk) + htx_remove_blk(dst, dstblk); /* HTX message is empty, it means the headers or trailers * part is too big to be copied at once.