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.
This commit is contained in:
Amaury Denoyelle 2022-12-15 10:58:05 +01:00
parent 788fc05401
commit c4913f6b54

View File

@ -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); sl->info.req.meth = find_http_meth(meth.ptr, meth.len);
if (isttest(authority)) if (isttest(authority)) {
htx_add_header(htx, ist("host"), authority); if (!htx_add_header(htx, ist("host"), authority)) {
h3c->err = H3_INTERNAL_ERROR;
len = -1;
goto out;
}
}
/* now treat standard headers */ /* now treat standard headers */
while (1) { 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; ++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) if (fin)
htx->flags |= HTX_FL_EOM; htx->flags |= HTX_FL_EOM;