Commit 1f3fef525d6788fdd0ba9a6162d00f05b5d79bda
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 | ... | ... |