From: Stefan Eissing Date: Mon, 16 Nov 2015 11:23:38 +0000 (+0000) Subject: fixing h2c scheme/authority initialization X-Git-Tag: 2.5.0-alpha~2647 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b11e0a5285c18daf04db0731d3db44310d831235;p=thirdparty%2Fapache%2Fhttpd.git fixing h2c scheme/authority initialization git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1714557 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/modules/http2/h2_request.c b/modules/http2/h2_request.c index 3737902c5c7..27c57577029 100644 --- a/modules/http2/h2_request.c +++ b/modules/http2/h2_request.c @@ -19,6 +19,7 @@ #include #include +#include #include #include @@ -134,22 +135,28 @@ apr_status_t h2_request_rwrite(h2_request *req, request_rec *r) apr_status_t status; req->method = r->method; - req->authority = r->hostname; - req->path = r->uri; req->scheme = (r->parsed_uri.scheme? r->parsed_uri.scheme - : r->server->server_scheme); - - if (!ap_strchr_c(req->authority, ':') && r->parsed_uri.port_str) { - req->authority = apr_psprintf(r->pool, "%s:%s", req->authority, - r->parsed_uri.port_str); + : ap_http_scheme(r)); + req->authority = r->hostname; + req->path = apr_uri_unparse(r->pool, &r->parsed_uri, + APR_URI_UNP_OMITSITEPART); + + if (!ap_strchr_c(req->authority, ':') && r->server) { + req->authority = apr_psprintf(r->pool, "%s:%d", req->authority, + (int)r->server->port); } + AP_DEBUG_ASSERT(req->scheme); + AP_DEBUG_ASSERT(req->authority); + AP_DEBUG_ASSERT(req->path); + AP_DEBUG_ASSERT(req->method); + status = add_all_h1_header(req, r->pool, r->headers_in); ap_log_rerror(APLOG_MARK, APLOG_DEBUG, status, r, "h2_request(%d): rwrite %s host=%s://%s%s", req->id, req->method, req->scheme, req->authority, req->path); - + return status; } diff --git a/modules/http2/h2_util.c b/modules/http2/h2_util.c index acfc9a61f7d..963d9ae354f 100644 --- a/modules/http2/h2_util.c +++ b/modules/http2/h2_util.c @@ -867,6 +867,10 @@ h2_ngheader *h2_util_ngheader_make_req(apr_pool_t *p, size_t n; AP_DEBUG_ASSERT(req); + AP_DEBUG_ASSERT(req->scheme); + AP_DEBUG_ASSERT(req->authority); + AP_DEBUG_ASSERT(req->path); + AP_DEBUG_ASSERT(req->method); n = 4; apr_table_do(count_header, &n, req->headers, NULL);