From c4913f6b54e8b323b9ecbd2a711b2cbf486afae0 Mon Sep 17 00:00:00 2001 From: Amaury Denoyelle Date: Thu, 15 Dec 2022 10:58:05 +0100 Subject: [PATCH] MINOR: h3: check return values of htx_add_* on headers parsing Check return values of htx_add_header()/htx_add_eof() during H3 HEADERS conversion to HTX. In case of error, the connection is interrupted with a CONNECTION_CLOSE. This commit is useful to detect abnormal situation on headers parsing. It should be backported up to 2.7. --- src/h3.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/h3.c b/src/h3.c index c9e6bbb39..8912fa5d9 100644 --- a/src/h3.c +++ b/src/h3.c @@ -529,8 +529,13 @@ static ssize_t h3_headers_to_htx(struct qcs *qcs, const struct buffer *buf, sl->info.req.meth = find_http_meth(meth.ptr, meth.len); - if (isttest(authority)) - htx_add_header(htx, ist("host"), authority); + if (isttest(authority)) { + if (!htx_add_header(htx, ist("host"), authority)) { + h3c->err = H3_INTERNAL_ERROR; + len = -1; + goto out; + } + } /* now treat standard headers */ while (1) { @@ -582,7 +587,11 @@ static ssize_t h3_headers_to_htx(struct qcs *qcs, const struct buffer *buf, } } - htx_add_header(htx, list[hdr_idx].n, list[hdr_idx].v); + if (!htx_add_header(htx, list[hdr_idx].n, list[hdr_idx].v)) { + h3c->err = H3_INTERNAL_ERROR; + len = -1; + goto out; + } ++hdr_idx; } @@ -594,7 +603,12 @@ static ssize_t h3_headers_to_htx(struct qcs *qcs, const struct buffer *buf, } } - htx_add_endof(htx, HTX_BLK_EOH); + if (!htx_add_endof(htx, HTX_BLK_EOH)) { + h3c->err = H3_INTERNAL_ERROR; + len = -1; + goto out; + } + if (fin) htx->flags |= HTX_FL_EOM;