Skip to content

Commit

Permalink
Explicitly perform bytes -> str decoding on Python 3
Browse files Browse the repository at this point in the history
  • Loading branch information
mgedmin committed Oct 26, 2017
1 parent 35602c5 commit 482d04f
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 10 deletions.
14 changes: 8 additions & 6 deletions src/zope/server/http/httprequestparser.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
processing but threads to do work.
"""
import re
import sys
from io import BytesIO

from six.moves.urllib.parse import unquote, urlsplit
Expand All @@ -27,6 +28,8 @@
from zope.server.interfaces import IStreamConsumer
from zope.interface import implementer

PY3 = sys.version_info >= (3, )


@implementer(IStreamConsumer)
class HTTPRequestParser(object):
Expand Down Expand Up @@ -108,14 +111,15 @@ def parse_header(self, header_plus):
else:
first_line = header_plus.rstrip()
header = b''
if PY3:
first_line = first_line.decode('latin1')
header = header.decode('latin1')
self.first_line = first_line
self.header = header

lines = self.get_header_lines()
headers = self.headers
for line in lines:
if not isinstance(line, str):
line = line.decode('latin1')
index = line.find(':')
if index > 0:
key = line[:index]
Expand Down Expand Up @@ -159,9 +163,9 @@ def get_header_lines(self):
Splits the header into lines, putting multi-line headers together.
"""
r = []
lines = self.header.split(b'\n')
lines = self.header.split('\n')
for line in lines:
if line and line[0] in b' \t':
if line and line[0] in ' \t':
r[-1] = r[-1] + line[1:]
else:
r.append(line)
Expand All @@ -173,8 +177,6 @@ def get_header_lines(self):

def crack_first_line(self):
r = self.first_line
if not isinstance(r, str):
r = r.decode('latin1')
m = self.first_line_re.match(r)
if m is not None and m.end() == len(r):
if m.group(3):
Expand Down
11 changes: 7 additions & 4 deletions src/zope/server/linereceiver/linecommandparser.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,14 @@
##############################################################################
"""Line Command Parser
"""

import sys

from zope.server.interfaces import IStreamConsumer
from zope.interface import implementer

PY3 = sys.version_info >= (3, )


@implementer(IStreamConsumer)
class LineCommandParser(object):
Expand All @@ -30,14 +35,12 @@ class LineCommandParser(object):

max_line_length = 1024 # Not a hard limit


def __init__(self, adj):
"""
adj is an Adjustments object.
"""
self.adj = adj


def received(self, data):
'See IStreamConsumer'
if self.completed:
Expand All @@ -56,12 +59,12 @@ def received(self, data):
self.inbuf = self.inbuf + s
self.completed = 1
line = self.inbuf.strip()
if PY3:
line = line.decode('utf-8')
self.parseLine(line)
return len(s)

def parseLine(self, line):
if not isinstance(line, str):
line = line.decode('utf-8')
parts = line.split(' ', 1)
if len(parts) == 2:
self.cmd, self.args = parts
Expand Down

0 comments on commit 482d04f

Please sign in to comment.