mirror of
https://github.com/apache/httpd.git
synced 2025-08-08 15:02:10 +03:00
mod_http2: when failing a request, make sure the request_rec fields
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
This commit is contained in:
@@ -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);
|
||||
@@ -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);
|
||||
|
Reference in New Issue
Block a user