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):
|
||||
try:
|
||||
headers = dict()
|
||||
l = sock_file.readline()
|
||||
|
||||
lname = None
|
||||
lval = None
|
||||
lname = lval = ''
|
||||
while True:
|
||||
line = sock_file.readline()
|
||||
if PY3K:
|
||||
try:
|
||||
l = str(l, 'ISO-8859-1')
|
||||
line = str(line, 'ISO-8859-1')
|
||||
except UnicodeDecodeError:
|
||||
self.err_log.warning('Client sent invalid header: ' + repr(l))
|
||||
|
||||
if l.strip() == '':
|
||||
self.err_log.warning('Client sent invalid header: ' + repr(line))
|
||||
if line == '\r\n':
|
||||
if lname: headers[str(lname)] = str(lval)
|
||||
break
|
||||
|
||||
if l[0] in ' \t' and lname:
|
||||
elif line.strip() == '' or '\0' in line:
|
||||
raise BadRequest("Empty line in hader")
|
||||
elif line[0] in ' \t' and lname:
|
||||
# Some headers take more than one line
|
||||
lval += ',' + l.strip()
|
||||
else:
|
||||
# HTTP header values are latin-1 encoded
|
||||
l = l.split(':', 1)
|
||||
lval += ' ' + line.strip()
|
||||
elif ':' in line:
|
||||
if lname: headers[str(lname)] = str(lval)
|
||||
lname, lval = line.split(':', 1)
|
||||
# HTTP header names are us-ascii encoded
|
||||
|
||||
lname = l[0].strip().upper().replace('-', '_')
|
||||
lval = l[-1].strip()
|
||||
headers[str(lname)] = str(lval)
|
||||
|
||||
l = sock_file.readline()
|
||||
lname = lname.strip().upper().replace('-', '_')
|
||||
# HTTP header values are latin-1 encoded
|
||||
lval = lval.strip()
|
||||
except socket.timeout:
|
||||
raise SocketTimeout("Socket timed out before request.")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user