Fixes #54 -- don't pass bytestrings through ord() (#55)

pull/58/head
Sergei Maertens 2017-04-18 16:57:53 +02:00 committed by Goulu
parent 9439a3a31a
commit f2b0650ad5
1 changed files with 15 additions and 7 deletions

View File

@ -15,6 +15,16 @@ import array
import six #Python 2+3 compatibility import six #Python 2+3 compatibility
if six.PY3:
def get_bytes(data):
for byte in data:
yield byte
else:
def get_bytes(data):
for char in data:
yield ord(char)
## BitParser ## BitParser
## ##
class BitParser(object): class BitParser(object):
@ -40,10 +50,9 @@ class BitParser(object):
return return
def feedbytes(self, data): def feedbytes(self, data):
for c in data: for byte in get_bytes(data):
b = ord(c)
for m in (128, 64, 32, 16, 8, 4, 2, 1): for m in (128, 64, 32, 16, 8, 4, 2, 1):
self._parse_bit(b & m) self._parse_bit(byte & m)
return return
def _parse_bit(self, x): def _parse_bit(self, x):
@ -328,11 +337,10 @@ class CCITTG4Parser(BitParser):
return return
def feedbytes(self, data): def feedbytes(self, data):
for c in data: for byte in get_bytes(data):
b = ord(c)
try: try:
for m in (128, 64, 32, 16, 8, 4, 2, 1): for m in (128, 64, 32, 16, 8, 4, 2, 1):
self._parse_bit(b & m) self._parse_bit(byte & m)
except self.ByteSkip: except self.ByteSkip:
self._accept = self._parse_mode self._accept = self._parse_mode
self._state = self.MODE self._state = self.MODE