Commit 8f9df350de196ee991f38ccc7399ebe2dc86ace2
1 parent
66bc3f34
Show banner in error case
Also correct banner and use the argparse-way to test for file existence
Showing
1 changed file
with
22 additions
and
10 deletions
oletools/msodde.py
| @@ -93,8 +93,7 @@ TAG_W_FLDSIMPLE = '{%s}fldSimple' % NS_WORD | @@ -93,8 +93,7 @@ TAG_W_FLDSIMPLE = '{%s}fldSimple' % NS_WORD | ||
| 93 | TAG_W_INSTRATTR= '{%s}instr' % NS_WORD | 93 | TAG_W_INSTRATTR= '{%s}instr' % NS_WORD |
| 94 | 94 | ||
| 95 | # banner to be printed at program start | 95 | # banner to be printed at program start |
| 96 | -BANNER = """ | ||
| 97 | -msodde %s - http://decalage.info/python/oletools | 96 | +BANNER = """msodde %s - http://decalage.info/python/oletools |
| 98 | THIS IS WORK IN PROGRESS - Check updates regularly! | 97 | THIS IS WORK IN PROGRESS - Check updates regularly! |
| 99 | Please report any issue at https://github.com/decalage2/oletools/issues | 98 | Please report any issue at https://github.com/decalage2/oletools/issues |
| 100 | """ % __version__ | 99 | """ % __version__ |
| @@ -105,21 +104,34 @@ BANNER_JSON = dict(type='meta', version=__version__, name='msodde', | @@ -105,21 +104,34 @@ BANNER_JSON = dict(type='meta', version=__version__, name='msodde', | ||
| 105 | 'Please report any issue at ' | 104 | 'Please report any issue at ' |
| 106 | 'https://github.com/decalage2/oletools/issues') | 105 | 'https://github.com/decalage2/oletools/issues') |
| 107 | 106 | ||
| 108 | -# === FUNCTIONS ============================================================== | 107 | +# === ARGUMENT PARSING ======================================================= |
| 108 | + | ||
| 109 | +class ArgParserWithBanner(argparse.ArgumentParser): | ||
| 110 | + """ Print banner before showing any error """ | ||
| 111 | + def error(self, message): | ||
| 112 | + print(BANNER) | ||
| 113 | + super(ArgParserWithBanner, self).error(message) | ||
| 114 | + | ||
| 115 | + | ||
| 116 | +def existing_file(filename): | ||
| 117 | + """ called by argument parser to see whether given file exists """ | ||
| 118 | + if not os.path.exists(filename): | ||
| 119 | + raise argparse.ArgumentTypeError('File {0} does not exist.' | ||
| 120 | + .format(filename)) | ||
| 121 | + return filename | ||
| 122 | + | ||
| 109 | 123 | ||
| 110 | def process_args(): | 124 | def process_args(): |
| 111 | - parser = argparse.ArgumentParser(description='A python tool to detect and extract DDE links in MS Office files') | ||
| 112 | - parser.add_argument("filepath", help="path of the file to be analyzed") | 125 | + parser = ArgParserWithBanner(description='A python tool to detect and extract DDE links in MS Office files') |
| 126 | + parser.add_argument("filepath", help="path of the file to be analyzed", | ||
| 127 | + type=existing_file, metavar='FILE') | ||
| 113 | parser.add_argument("--json", '-j', action='store_true', | 128 | parser.add_argument("--json", '-j', action='store_true', |
| 114 | help="Output in json format") | 129 | help="Output in json format") |
| 115 | 130 | ||
| 116 | - args = parser.parse_args() | 131 | + return parser.parse_args() |
| 117 | 132 | ||
| 118 | - if not os.path.exists(args.filepath): | ||
| 119 | - print('File {} does not exist.'.format(args.filepath)) | ||
| 120 | - sys.exit(1) | ||
| 121 | 133 | ||
| 122 | - return args | 134 | +# === FUNCTIONS ============================================================== |
| 123 | 135 | ||
| 124 | # from [MS-DOC], section 2.8.25 (PlcFld): | 136 | # from [MS-DOC], section 2.8.25 (PlcFld): |
| 125 | # A field consists of two parts: field instructions and, optionally, a result. All fields MUST begin with | 137 | # A field consists of two parts: field instructions and, optionally, a result. All fields MUST begin with |