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.
diff --git a/src/h3.c b/src/h3.c
index c9e6bbb..8912fa5 100644
--- a/src/h3.c
+++ b/src/h3.c
@@ -529,8 +529,13 @@
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 @@
}
}
- 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 @@
}
}
- 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;