Commit f1e5ebe7a14ea845660ce6a6d6b37fac3b3a1f56

Authored by Christian Herdtweck
1 parent d604e72d

simplify exception-handling around mso_file_extract in open_mht and open_word2003xml

Showing 1 changed file with 14 additions and 10 deletions
oletools/olevba.py
... ... @@ -2094,11 +2094,14 @@ class VBA_Parser(object):
2094 2094 if is_mso_file(mso_data):
2095 2095 # decompress the zlib data stored in the MSO file, which is the OLE container:
2096 2096 # TODO: handle different offsets => separate function
2097   - ole_data = mso_file_extract(mso_data)
2098 2097 try:
  2098 + ole_data = mso_file_extract(mso_data)
2099 2099 self.ole_subfiles.append(VBA_Parser(filename=fname, data=ole_data))
2100   - except Exception:
2101   - log.error('%s does not contain a valid OLE file' % fname)
  2100 + except MsoExtractionError:
  2101 + log.exception('Failed decompressing an MSO container in %r - %s'
  2102 + % (fname, MSG_OLEVBA_ISSUES))
  2103 + except FileOpenError as exc:
  2104 + log.debug('%s is not a valid OLE sub file (%s)' % (fname, exc))
2102 2105 else:
2103 2106 log.error('%s is not a valid MSO file' % fname)
2104 2107 # set type only if parsing succeeds
... ... @@ -2150,16 +2153,17 @@ class VBA_Parser(object):
2150 2153 log.debug('Found ActiveMime header, decompressing MSO container')
2151 2154 try:
2152 2155 ole_data = mso_file_extract(part_data)
2153   - try:
2154   - # TODO: check if it is actually an OLE file
2155   - # TODO: get the MSO filename from content_location?
2156   - self.ole_subfiles.append(VBA_Parser(filename=fname, data=ole_data))
2157   - except Exception:
2158   - log.debug('%s does not contain a valid OLE file' % fname)
2159   - except Exception:
  2156 +
  2157 + # TODO: check if it is actually an OLE file
  2158 + # TODO: get the MSO filename from content_location?
  2159 + self.ole_subfiles.append(VBA_Parser(filename=fname, data=ole_data))
  2160 + except MsoExtractionError:
2160 2161 log.exception('Failed decompressing an MSO container in %r - %s'
2161 2162 % (fname, MSG_OLEVBA_ISSUES))
2162 2163 # TODO: bug here - need to split in smaller functions/classes?
  2164 + except FileOpenError as exc:
  2165 + log.debug('%s does not contain a valid OLE file (%s)'
  2166 + % (fname, exc))
2163 2167 else:
2164 2168 try:
2165 2169 log.debug('type(part_data) = %s' % type(part_data))
... ...