diff --git a/checker/plugins/scripts.py b/checker/plugins/scripts.py index 362f9ac..55d0219 100644 --- a/checker/plugins/scripts.py +++ b/checker/plugins/scripts.py @@ -31,9 +31,14 @@ def set_up_env_sandbox() -> None: # pragma: nocover for variable in args.env_whitelist: os.environ[variable] = env[variable] + if isinstance(args.script, list): + safe_shell_script = " ".join(args.script) + else: + safe_shell_script = args.script + try: result = subprocess.run( - args.script, + safe_shell_script, shell=True, cwd=args.origin, timeout=args.timeout, # kill process after timeout, raise TimeoutExpired diff --git a/tests/plugins/test_scripts.py b/tests/plugins/test_scripts.py index e9ab017..d110426 100644 --- a/tests/plugins/test_scripts.py +++ b/tests/plugins/test_scripts.py @@ -46,10 +46,13 @@ def test_plugin_args(self, parameters: dict[str, Any], expected_exception: Excep "script, output, expected_exception", [ ("echo Hello", "Hello", None), + (["echo", "Hello"], "Hello", None), ("sleep 0.1", "", None), + (["sleep", "0.1"], "", None), ("true", "", None), ("false", "", PluginExecutionFailed), ("echo Hello && false", "Hello", PluginExecutionFailed), + (["echo", "Hello", "&&", "false"], "Hello", PluginExecutionFailed), ], ) def test_simple_cases(self, script: str, output: str, expected_exception: Exception | None) -> None: