From: Martin Kraemer Date: Tue, 8 Jan 2002 16:26:18 +0000 (+0000) Subject: Sorry -- undoing accidentally committed stuff. The Content-Length X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=83301b3ee2f2cd8b8868b2eecd14dc8aa25c3d5e;p=thirdparty%2Fapache%2Fhttpd.git Sorry -- undoing accidentally committed stuff. The Content-Length fix of the preceding commit is preserved. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/1.3.x@92768 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/main/http_protocol.c b/src/main/http_protocol.c index dc21559273d..26240558aeb 100644 --- a/src/main/http_protocol.c +++ b/src/main/http_protocol.c @@ -1041,43 +1041,16 @@ static int read_request_line(request_rec *r) r->protocol = ap_pstrdup(r->pool, "HTTP/1.0"); return 0; } + r->assbackwards = (ll[0] == '\0'); r->protocol = ap_pstrdup(r->pool, ll[0] ? ll : "HTTP/0.9"); - /* The following test tries to skip past the "HTTP/nn.mm" - * protocol string, collecting major=nn and minor=mm. - * ll is advanced past "HTTP/nn.mm" so that it can be checked - * for proper string termination (only valid chars: \r\n). - */ - if (memcmp(ll,"HTTP/",5) == 0 && isdigit(ll[5])) { - - /* Read major protocol level: */ - major = strtol(&ll[5], &ll, 10); - if (errno != ERANGE && ll[0] == '/' && isdigit(ll[1])) { - - /* Read minor protocol level: */ - minor = strtol(&ll[1], &ll, 10); + if (2 == sscanf(r->protocol, "HTTP/%u.%u", &major, &minor) + && minor < HTTP_VERSION(1,0)) /* don't allow HTTP/0.1000 */ + r->proto_num = HTTP_VERSION(major, minor); + else + r->proto_num = HTTP_VERSION(1,0); - if (errno != ERANGE) { - if (minor < HTTP_VERSION(1,0)) /* don't allow HTTP/0.1000 */ - r->proto_num = HTTP_VERSION(major, minor); - else - r->proto_num = HTTP_VERSION(1,0); - } - } - } - /* If the request does not end after the "HTTP/x.y\r\n" (or after the - * URI in HTTP/0.9), then signal an error condition [400 Bad Request]. - */ - if (ll[strspn(ll," \r\n")] != '\0') { - ap_table_setn(r->notes, "error-notes", - "Request line not ending properly after \"HTTP/x.y\":" - "
\n", ap_escape_html(r->pool, r->protocol), "
"); - r->status = HTTP_BAD_REQUEST; - r->proto_num = HTTP_VERSION(1,0); - r->protocol = ap_pstrdup(r->pool, "HTTP/1.0"); - return 0; - } return 1; }