Commit 1f3fef525d6788fdd0ba9a6162d00f05b5d79bda

Authored by Christian Herdtweck
1 parent a7093b9b

raise new exceptions in _extract_vba if not relaxed

Showing 1 changed file with 21 additions and 8 deletions
oletools/olevba.py
... ... @@ -1195,7 +1195,11 @@ def _extract_vba(ole, vba_root, project_path, dir_path, relaxed=False):
1195 1195  
1196 1196 def check_value(name, expected, value):
1197 1197 if expected != value:
1198   - log.error("invalid value for {0} expected {1:04X} got {2:04X}".format(name, expected, value))
  1198 + if relaxed:
  1199 + log.error("invalid value for {0} expected {1:04X} got {2:04X}"
  1200 + .format(name, expected, value))
  1201 + else:
  1202 + raise UnexpectedDataError(dir_path, name, expected, value)
1199 1203  
1200 1204 dir_stream = cStringIO.StringIO(decompress_stream(dir_compressed))
1201 1205  
... ... @@ -1572,10 +1576,15 @@ def _extract_vba(ole, vba_root, project_path, dir_path, relaxed=False):
1572 1576 .format(uni_out(stream_name), ioe))
1573 1577  
1574 1578 if code_data is None:
1575   - log.warning("Could not find module {}!"
1576   - .format('/'.join(uni_out(stream_name)
1577   - for stream_name in try_names)))
1578   - continue
  1579 + log.info("Could not open stream {} of {} ('VBA/' + one of {})!"
  1580 + .format(projectmodule_index, projectmodules_count,
  1581 + '/'.join("'" + uni_out(stream_name) + "'"
  1582 + for stream_name in try_names)))
  1583 + if relaxed:
  1584 + continue # ... with next submodule
  1585 + else:
  1586 + raise SubstreamOpenError('[BASE]', 'VBA/' +
  1587 + uni_out(modulename_unicode_modulename_unicode))
1579 1588  
1580 1589 log.debug("length of code_data = {0}".format(len(code_data)))
1581 1590 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):
1595 1604 log.debug('extracted file {0}'.format(filename))
1596 1605 else:
1597 1606 log.warning("module stream {0} has code data length 0".format(modulestreamname_streamname))
  1607 + except (UnexpectedDataError, SubstreamOpenError):
  1608 + raise
1598 1609 except Exception as exc:
1599   - log.warning('Error parsing module {} of {} in _extract_vba:'
1600   - .format(projectmodule_index, projectmodules_count),
1601   - exc_info=True)
  1610 + log.info('Error parsing module {} of {} in _extract_vba:'
  1611 + .format(projectmodule_index, projectmodules_count),
  1612 + exc_info=True)
  1613 + if not relaxed:
  1614 + raise
1602 1615 _ = unused # make pylint happy: now variable "unused" is being used ;-)
1603 1616 return
1604 1617  
... ...