mirror of
https://github.com/frappe/gunicorn.git
synced 2026-01-14 11:09:11 +08:00
http/message: Split request line as bytes to avoid splitting on 0x0A. Fixes #1577
This commit is contained in:
parent
ccfb29871c
commit
15e901a5e5
@ -173,7 +173,7 @@ class Request(Message):
|
|||||||
buf.write(rbuf)
|
buf.write(rbuf)
|
||||||
line, rbuf = self.read_line(unreader, buf, self.limit_request_line)
|
line, rbuf = self.read_line(unreader, buf, self.limit_request_line)
|
||||||
|
|
||||||
self.parse_request_line(bytes_to_str(line))
|
self.parse_request_line(line)
|
||||||
buf = BytesIO()
|
buf = BytesIO()
|
||||||
buf.write(rbuf)
|
buf.write(rbuf)
|
||||||
|
|
||||||
@ -301,10 +301,10 @@ class Request(Message):
|
|||||||
"proxy_port": d_port
|
"proxy_port": d_port
|
||||||
}
|
}
|
||||||
|
|
||||||
def parse_request_line(self, line):
|
def parse_request_line(self, line_bytes):
|
||||||
bits = line.split(None, 2)
|
bits = [bytes_to_str(bit) for bit in line_bytes.split(None, 2)]
|
||||||
if len(bits) != 3:
|
if len(bits) != 3:
|
||||||
raise InvalidRequestLine(line)
|
raise InvalidRequestLine(bytes_to_str(line_bytes))
|
||||||
|
|
||||||
# Method
|
# Method
|
||||||
if not METH_RE.match(bits[0]):
|
if not METH_RE.match(bits[0]):
|
||||||
@ -325,7 +325,7 @@ class Request(Message):
|
|||||||
try:
|
try:
|
||||||
parts = urlsplit(self.uri)
|
parts = urlsplit(self.uri)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
raise InvalidRequestLine(line)
|
raise InvalidRequestLine(bytes_to_str(line_bytes))
|
||||||
self.path = parts.path or ""
|
self.path = parts.path or ""
|
||||||
self.query = parts.query or ""
|
self.query = parts.query or ""
|
||||||
self.fragment = parts.fragment or ""
|
self.fragment = parts.fragment or ""
|
||||||
|
|||||||
2
tests/requests/valid/027.http
Normal file
2
tests/requests/valid/027.http
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
GET /à%20k HTTP/1.0\r\n
|
||||||
|
\r\n
|
||||||
8
tests/requests/valid/027.py
Normal file
8
tests/requests/valid/027.py
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
request = {
|
||||||
|
"method": "GET",
|
||||||
|
"uri": uri("/\xc3\xa0%20k"),
|
||||||
|
"version": (1, 0),
|
||||||
|
"headers": [
|
||||||
|
],
|
||||||
|
"body": ''
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user