From: William A. Rowe Jr Date: Wed, 7 Dec 2016 22:54:36 +0000 (+0000) Subject: As noted by rpluem, r->protocol isn't const char *. Ensure the exit cases X-Git-Tag: 2.4.24~59 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=264da5160214639ff879755b9e2658dad02625d7;p=apache As noted by rpluem, r->protocol isn't const char *. Ensure the exit cases are pstrdup'ed. Note that r->protocol = "" is not in a return path. Simplify the garbage-in protocol handling without consideration to 'strict' settings. It is expected to be caused by an invalid raw SP in the URL. Backports: r1773159 (with pstrdup enhancement) Submitted by: rpluem, wrowe Reverted in r1773160 (for further STATUS review) git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1773158 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/server/protocol.c b/server/protocol.c index 7bc292cb16..9b2b107fc3 100644 --- a/server/protocol.c +++ b/server/protocol.c @@ -782,18 +782,15 @@ rrl_done: memcpy((char*)r->protocol, "HTTP", 4); } else if (r->protocol[0]) { - r->assbackwards = 0; - r->proto_num = HTTP_VERSION(1,0); /* Defer setting the r->protocol string till error msg is composed */ - if (strict && deferred_error == rrl_none) + r->proto_num = HTTP_VERSION(0,9); + if (deferred_error == rrl_none) deferred_error = rrl_badprotocol; - else - r->protocol = "HTTP/1.0"; } else { r->assbackwards = 1; - r->protocol = "HTTP/0.9"; r->proto_num = HTTP_VERSION(0, 9); + r->protocol = apr_pstrdup(r->pool, "HTTP/0.9"); } /* Determine the method_number and parse the uri prior to invoking error @@ -906,7 +903,7 @@ rrl_failed: r->assbackwards = 0; r->connection->keepalive = AP_CONN_CLOSE; r->proto_num = HTTP_VERSION(1, 0); - r->protocol = "HTTP/1.0"; + r->protocol = apr_pstrdup(r->pool, "HTTP/1.0"); } return 0; }