]> granicus.if.org Git - apache/commitdiff
As noted by rpluem, r->protocol isn't const char *. Ensure the exit cases
authorWilliam A. Rowe Jr <wrowe@apache.org>
Wed, 7 Dec 2016 22:54:36 +0000 (22:54 +0000)
committerWilliam A. Rowe Jr <wrowe@apache.org>
Wed, 7 Dec 2016 22:54:36 +0000 (22:54 +0000)
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

server/protocol.c

index 7bc292cb162479fde6504a0d14e2a363018ee7f8..9b2b107fc32004156e9e88e249469f52ee599ee5 100644 (file)
@@ -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;
 }