Commit 2bd665ad593f2f43e4c52521c4df24f2361b44f1
1 parent
90f25d4c
msodde: avoid misleading stack traces from fail in except block
Showing
1 changed file
with
14 additions
and
11 deletions
oletools/msodde.py
| @@ -818,20 +818,23 @@ def process_file(filepath, field_filter_mode=None): | @@ -818,20 +818,23 @@ def process_file(filepath, field_filter_mode=None): | ||
| 818 | return process_xls(filepath) | 818 | return process_xls(filepath) |
| 819 | else: | 819 | else: |
| 820 | return process_doc(filepath) | 820 | return process_doc(filepath) |
| 821 | - else: | ||
| 822 | - with open(filepath, 'rb') as file_handle: | ||
| 823 | - if file_handle.read(4) == RTF_START: | ||
| 824 | - # This is a RTF file | ||
| 825 | - return process_rtf(file_handle, field_filter_mode) | 821 | + |
| 822 | + with open(filepath, 'rb') as file_handle: | ||
| 823 | + if file_handle.read(4) == RTF_START: | ||
| 824 | + # This is a RTF file | ||
| 825 | + return process_rtf(file_handle, field_filter_mode) | ||
| 826 | + | ||
| 826 | try: | 827 | try: |
| 827 | doctype = ooxml.get_type(filepath) | 828 | doctype = ooxml.get_type(filepath) |
| 828 | - log.debug('Detected file type: {0}'.format(doctype)) | ||
| 829 | - if doctype == ooxml.DOCTYPE_EXCEL: | ||
| 830 | - return process_xlsx(filepath, field_filter_mode) | ||
| 831 | - else: | ||
| 832 | - return process_docx(filepath, field_filter_mode) | ||
| 833 | except Exception: | 829 | except Exception: |
| 834 | log.debug('Exception trying to xml-parse file', exc_info=True) | 830 | log.debug('Exception trying to xml-parse file', exc_info=True) |
| 831 | + doctype = None | ||
| 832 | + | ||
| 833 | + if doctype: | ||
| 834 | + log.debug('Detected file type: {0}'.format(doctype)) | ||
| 835 | + if doctype == ooxml.DOCTYPE_EXCEL: | ||
| 836 | + return process_xlsx(filepath, field_filter_mode) | ||
| 837 | + else: | ||
| 835 | return process_docx(filepath, field_filter_mode) | 838 | return process_docx(filepath, field_filter_mode) |
| 836 | 839 | ||
| 837 | 840 | ||
| @@ -881,7 +884,7 @@ def main(cmd_line_args=None): | @@ -881,7 +884,7 @@ def main(cmd_line_args=None): | ||
| 881 | jout.append(dict(type='error', error=type(exc).__name__, | 884 | jout.append(dict(type='error', error=type(exc).__name__, |
| 882 | message=str(exc))) # strange: str(exc) is enclosed in "" | 885 | message=str(exc))) # strange: str(exc) is enclosed in "" |
| 883 | else: | 886 | else: |
| 884 | - raise | 887 | + raise # re-raise last known exception, keeping trace intact |
| 885 | 888 | ||
| 886 | if args.json: | 889 | if args.json: |
| 887 | for line in text.splitlines(): | 890 | for line in text.splitlines(): |