From 6b091f95c491a6eb7a45ed98c3c925da5b46b38e Mon Sep 17 00:00:00 2001 From: Raphaƫl Vinot Date: Wed, 26 Apr 2017 22:07:56 +0200 Subject: [PATCH] Some more fixes related to python3 (#160) --- oletools/olevba3.py | 41 ++++++++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/oletools/olevba3.py b/oletools/olevba3.py index 69e5f86..aa02fd9 100644 --- a/oletools/olevba3.py +++ b/oletools/olevba3.py @@ -238,6 +238,8 @@ import email # for MHTML parsing import string # for printable import json # for json output mode (argument --json) +from pyparsing import ParserElement + # import lxml or ElementTree for XML parsing: try: # lxml: best performance for XML processing @@ -287,6 +289,25 @@ else: # xrange is now called range: xrange = range + +# === PYTHON 3.0 - 3.4 SUPPORT ====================================================== + +# From https://gist.github.com/ynkdir/867347/c5e188a4886bc2dd71876c7e069a7b00b6c16c61 + +if sys.version_info >= (3, 0) and sys.version_info < (3, 5): + import codecs + + _backslashreplace_errors = codecs.lookup_error("backslashreplace") + + def backslashreplace_errors(exc): + if isinstance(exc, UnicodeDecodeError): + u = "".join("\\x{0:02x}".format(c) for c in exc.object[exc.start:exc.end]) + return (u, exc.end) + return _backslashreplace_errors(exc) + + codecs.register_error("backslashreplace", backslashreplace_errors) + + # === LOGGING ================================================================= class NullHandler(logging.Handler): @@ -1535,7 +1556,7 @@ def _extract_vba(ole, vba_root, project_path, dir_path, relaxed=False): modulename_id = struct.unpack("