From 9bc5643950ed40a8561866e72559a353b16905b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Mon, 1 Apr 2024 14:20:12 +0200 Subject: [PATCH] src/powerprofilesctl: Fail if a launch unknown argument is before than command --- src/powerprofilesctl | 17 ++++++++++++++++- tests/integration_test.py | 11 +++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/powerprofilesctl b/src/powerprofilesctl index e50bab0..a38b380 100755 --- a/src/powerprofilesctl +++ b/src/powerprofilesctl @@ -204,13 +204,28 @@ def get_parser(): return parser +def check_unknown_args(args, unknown_args, cmd): + if cmd != "launch": + return False + + for idx, unknown_arg in enumerate(unknown_args): + arg = args[idx] + if arg == cmd: + return True + if unknown_arg == arg: + return False + + return True + + def main(): parser = get_parser() args, unknown = parser.parse_known_args() # default behavior is to run list if no command is given if not args.command: args.func = _list - if args.command == "launch": + + if check_unknown_args(sys.argv[1:], unknown, args.command): args.arguments += unknown unknown = [] diff --git a/tests/integration_test.py b/tests/integration_test.py index aa7d892..853c39c 100644 --- a/tests/integration_test.py +++ b/tests/integration_test.py @@ -1749,6 +1749,17 @@ class Tests(dbusmock.DBusTestCase): stderr=subprocess.PIPE, ) + def test_launch_arguments_invalid(self): + self.create_platform_profile() + self.start_daemon() + self.assert_eventually(lambda: self.get_dbus_property("ActiveProfile")) + + with self.assertRaises(subprocess.CalledProcessError): + tool_cmd = self.powerprofilesctl_command() + subprocess.check_output( + tool_cmd + ["--foo-arg", "launch", "true"], stderr=subprocess.PIPE + ) + def test_vanishing_hold(self): self.create_platform_profile() self.start_daemon()