From f2b0650ad5dbb5e0f2e6a844387fe83e61fcde30 Mon Sep 17 00:00:00 2001 From: Sergei Maertens Date: Tue, 18 Apr 2017 16:57:53 +0200 Subject: [PATCH] Fixes #54 -- don't pass bytestrings through ord() (#55) --- pdfminer/ccitt.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/pdfminer/ccitt.py b/pdfminer/ccitt.py index 0ed5a18..efc3482 100644 --- a/pdfminer/ccitt.py +++ b/pdfminer/ccitt.py @@ -13,7 +13,17 @@ import sys 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 ## @@ -40,10 +50,9 @@ class BitParser(object): return def feedbytes(self, data): - for c in data: - b = ord(c) + for byte in get_bytes(data): for m in (128, 64, 32, 16, 8, 4, 2, 1): - self._parse_bit(b & m) + self._parse_bit(byte & m) return def _parse_bit(self, x): @@ -328,11 +337,10 @@ class CCITTG4Parser(BitParser): return def feedbytes(self, data): - for c in data: - b = ord(c) + for byte in get_bytes(data): try: for m in (128, 64, 32, 16, 8, 4, 2, 1): - self._parse_bit(b & m) + self._parse_bit(byte & m) except self.ByteSkip: self._accept = self._parse_mode self._state = self.MODE