From e3632d8a64df5edd969a8e4170c59b2b3cd4503f Mon Sep 17 00:00:00 2001 From: Sei Lisa Date: Sun, 25 Dec 2016 21:34:42 +0100 Subject: [PATCH] Create a list of valid optimizer options and check against it. Validating the input options was badly needed. --- main.py | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/main.py b/main.py index d01b999..64e49d0 100755 --- a/main.py +++ b/main.py @@ -300,6 +300,15 @@ Case insensitive. """) return +validoptions = frozenset(('extendedglobalexpr','breakcont','extendedtypecast', + 'extendedassignment','allowkeyconcat','allowmultistrings','duplabels', + 'lazylists','enableswitch','errmissingdefault','funcoverride','optimize', + 'optsigns','optfloats','constfold','dcr','shrinknames','addstrings', + 'foldtabs','warntabs','processpre','explicitcast', + 'help' + # 'clear' is handled as a special case +)) + def main(argv): """Main executable.""" @@ -313,6 +322,10 @@ def main(argv): 'optsigns','optfloats','constfold','dcr','errmissingdefault', )) + assert not (options - validoptions), (u"Default options not present in" + u" validoptions: '%s'" + % (b"', '".join(options - validoptions)).decode('utf8')) + try: opts, args = getopt.gnu_getopt(argv[1:], 'hO:o:p:P:HT', ('optimizer-options=', 'help', 'version', 'output=', 'header', @@ -346,18 +359,27 @@ def main(argv): if opt in ('-O', '--optimizer-options'): optchanges = arg.lower().split(',') for chg in optchanges: + if not chg: + continue if chg in ('clear', '+clear'): options = set() continue if chg == '-clear': # ignore continue - if chg[0:1] not in ('+', '-'): - chg = '+' + chg - if chg[0] == '-': - options.discard(chg[1:]) + chgfix = chg + if chgfix[0] not in ('+', '-'): + chgfix = '+' + chgfix + if chgfix[1:] not in validoptions: + Usage(argv[0], 'optimizer-options') + sys.stderr.write(u"\nError: Unrecognized" + u" optimizer option: %s\n" % chg) + return 1 + if chgfix[0] == '-': + options.discard(chgfix[1:]) else: - options.add(chg[1:]) + options.add(chgfix[1:]) + del chgfix elif opt in ('-h', '--help'): Usage(argv[0])