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("