better rocket parsing, support for multiline headers
This commit is contained in:
@@ -1 +1 @@
|
|||||||
Version 2.0.9 (2012-09-29 18:35:01) dev
|
Version 2.0.9 (2012-09-29 18:39:44) dev
|
||||||
|
|||||||
+16
-20
@@ -1457,33 +1457,29 @@ class Worker(Thread):
|
|||||||
def read_headers(self, sock_file):
|
def read_headers(self, sock_file):
|
||||||
try:
|
try:
|
||||||
headers = dict()
|
headers = dict()
|
||||||
l = sock_file.readline()
|
lname = lval = ''
|
||||||
|
|
||||||
lname = None
|
|
||||||
lval = None
|
|
||||||
while True:
|
while True:
|
||||||
|
line = sock_file.readline()
|
||||||
if PY3K:
|
if PY3K:
|
||||||
try:
|
try:
|
||||||
l = str(l, 'ISO-8859-1')
|
line = str(line, 'ISO-8859-1')
|
||||||
except UnicodeDecodeError:
|
except UnicodeDecodeError:
|
||||||
self.err_log.warning('Client sent invalid header: ' + repr(l))
|
self.err_log.warning('Client sent invalid header: ' + repr(line))
|
||||||
|
if line == '\r\n':
|
||||||
if l.strip() == '':
|
if lname: headers[str(lname)] = str(lval)
|
||||||
break
|
break
|
||||||
|
elif line.strip() == '' or '\0' in line:
|
||||||
if l[0] in ' \t' and lname:
|
raise BadRequest("Empty line in hader")
|
||||||
|
elif line[0] in ' \t' and lname:
|
||||||
# Some headers take more than one line
|
# Some headers take more than one line
|
||||||
lval += ',' + l.strip()
|
lval += ' ' + line.strip()
|
||||||
else:
|
elif ':' in line:
|
||||||
# HTTP header values are latin-1 encoded
|
if lname: headers[str(lname)] = str(lval)
|
||||||
l = l.split(':', 1)
|
lname, lval = line.split(':', 1)
|
||||||
# HTTP header names are us-ascii encoded
|
# HTTP header names are us-ascii encoded
|
||||||
|
lname = lname.strip().upper().replace('-', '_')
|
||||||
lname = l[0].strip().upper().replace('-', '_')
|
# HTTP header values are latin-1 encoded
|
||||||
lval = l[-1].strip()
|
lval = lval.strip()
|
||||||
headers[str(lname)] = str(lval)
|
|
||||||
|
|
||||||
l = sock_file.readline()
|
|
||||||
except socket.timeout:
|
except socket.timeout:
|
||||||
raise SocketTimeout("Socket timed out before request.")
|
raise SocketTimeout("Socket timed out before request.")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user