From 1f3fef525d6788fdd0ba9a6162d00f05b5d79bda Mon Sep 17 00:00:00 2001 From: Christian Herdtweck Date: Tue, 7 Jun 2016 12:40:30 +0200 Subject: [PATCH] raise new exceptions in _extract_vba if not relaxed --- oletools/olevba.py | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/oletools/olevba.py b/oletools/olevba.py index d313db9..7efdac2 100755 --- a/oletools/olevba.py +++ b/oletools/olevba.py @@ -1195,7 +1195,11 @@ def _extract_vba(ole, vba_root, project_path, dir_path, relaxed=False): def check_value(name, expected, value): if expected != value: - log.error("invalid value for {0} expected {1:04X} got {2:04X}".format(name, expected, value)) + if relaxed: + log.error("invalid value for {0} expected {1:04X} got {2:04X}" + .format(name, expected, value)) + else: + raise UnexpectedDataError(dir_path, name, expected, value) dir_stream = cStringIO.StringIO(decompress_stream(dir_compressed)) @@ -1572,10 +1576,15 @@ def _extract_vba(ole, vba_root, project_path, dir_path, relaxed=False): .format(uni_out(stream_name), ioe)) if code_data is None: - log.warning("Could not find module {}!" - .format('/'.join(uni_out(stream_name) - for stream_name in try_names))) - continue + log.info("Could not open stream {} of {} ('VBA/' + one of {})!" + .format(projectmodule_index, projectmodules_count, + '/'.join("'" + uni_out(stream_name) + "'" + for stream_name in try_names))) + if relaxed: + continue # ... with next submodule + else: + raise SubstreamOpenError('[BASE]', 'VBA/' + + uni_out(modulename_unicode_modulename_unicode)) log.debug("length of code_data = {0}".format(len(code_data))) log.debug("offset of code_data = {0}".format(moduleoffset_textoffset)) @@ -1595,10 +1604,14 @@ def _extract_vba(ole, vba_root, project_path, dir_path, relaxed=False): log.debug('extracted file {0}'.format(filename)) else: log.warning("module stream {0} has code data length 0".format(modulestreamname_streamname)) + except (UnexpectedDataError, SubstreamOpenError): + raise except Exception as exc: - log.warning('Error parsing module {} of {} in _extract_vba:' - .format(projectmodule_index, projectmodules_count), - exc_info=True) + log.info('Error parsing module {} of {} in _extract_vba:' + .format(projectmodule_index, projectmodules_count), + exc_info=True) + if not relaxed: + raise _ = unused # make pylint happy: now variable "unused" is being used ;-) return -- libgit2 0.21.4