diff --git a/py/common/util.py b/py/common/util.py index 88dea8c..995d329 100644 --- a/py/common/util.py +++ b/py/common/util.py @@ -42,15 +42,29 @@ def arg_value_by_name(parser, args, arg_name): return getattr(args, action.dest) +def convert_option_to_dest(parser, arg_name): + """ + Convert a command line option to its destination variable name + """ + for action in parser._actions: + if arg_name in action.option_strings: + return action.dest + return None + + def sanitize_opts_arg(parser, args, arg_name): """sanitize command-line options passed to an option of argparse.ArgumentParser""" opts_str = arg_value_by_name(parser, args, arg_name) if opts_str is None: return None + dest = convert_option_to_dest(parser, arg_name) + if dest is None: + return None + # split, quote, and rejoin the options to avoid shell injection try: - split_opts = shlex.split(args.snyk_code_test_opts) + split_opts = shlex.split(getattr(args, dest)) # starting with Python 3.8, one can use shlex.join(split_opts) return ' '.join(shlex.quote(arg) for arg in split_opts)