Commit 31d1ab2a authored by William A. Rowe Jr's avatar William A. Rowe Jr
Browse files

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



git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x-merge-http-strict@1773161 13f79535-47bb-0310-9956-ffa450edef68
parent f1367068
Loading
Loading
Loading
Loading
+4 −7
Original line number Diff line number Diff line
@@ -782,17 +782,14 @@ rrl_done:
            memcpy((char*)r->protocol, "HTTP", 4);
    }
    else if (r->protocol[0]) {
        r->assbackwards = 0;
        r->proto_num = HTTP_VERSION(1,0);
        r->proto_num = HTTP_VERSION(0, 9);
        /* Defer setting the r->protocol string till error msg is composed */
        if (strict && deferred_error == rrl_none)
        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->protocol  = apr_pstrdup(r->pool, "HTTP/0.9");
        r->proto_num = HTTP_VERSION(0, 9);
    }

@@ -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;
}