Skip to content

Commit

Permalink
mod_http2: when failing a request, make sure the request_rec fields
Browse files Browse the repository at this point in the history
are populated (best effort) for the response generation since this
might access fields in there.
Respect a http_status already assigned during stream processing
for error generation.



git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1910686 13f79535-47bb-0310-9956-ffa450edef68
  • Loading branch information
icing committed Jun 29, 2023
1 parent 7ca5e6b commit 64c9f29
Showing 1 changed file with 15 additions and 1 deletion.
16 changes: 15 additions & 1 deletion modules/http2/h2_request.c
Original file line number Diff line number Diff line change
Expand Up @@ -385,7 +385,11 @@ request_rec *h2_create_request_rec(const h2_request *req, conn_rec *c,
/* Time to populate r with the data we have. */
r->request_time = req->request_time;
AP_DEBUG_ASSERT(req->authority);
if (is_connect) {
if (req->http_status != H2_HTTP_STATUS_UNSET) {
access_status = req->http_status;
goto die;
}
else if (is_connect) {
/* CONNECT MUST NOT have scheme or path */
r->the_request = apr_psprintf(r->pool, "%s %s HTTP/2.0",
req->method, req->authority);
Expand Down Expand Up @@ -548,6 +552,16 @@ request_rec *h2_create_request_rec(const h2_request *req, conn_rec *c,
return r;

die:
if (!r->method) {
/* if we fail early, `r` is not properly initialized for error
* processing which accesses fields in message generation.
* Make a best effort. */
if (!r->the_request) {
r->the_request = apr_psprintf(r->pool, "%s %s HTTP/2.0",
req->method, req->path);
}
ap_parse_request_line(r);
}
ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, c,
"ap_die(%d) for %s", access_status, r->the_request);
ap_die(access_status, r);
Expand Down

0 comments on commit 64c9f29

Please sign in to comment.