From 8d6af632bf55accad7265496b86789410cd0a28b Mon Sep 17 00:00:00 2001 From: Junji Watanabe Date: Thu, 2 Mar 2023 07:39:39 +0000 Subject: [PATCH] [ninjalog_uploader] Exclude absolute paths and options from targets Absolute paths and options start with '-' should be excluded from targetrs. Bug: b/270907050 Change-Id: Ic430381084b6d3673c34b45c8b3ca967f0f8af89 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/4302232 Reviewed-by: Takuto Ikuta Auto-Submit: Junji Watanabe Commit-Queue: Junji Watanabe --- ninjalog_uploader.py | 17 ++++++++++++++--- tests/ninjalog_uploader_test.py | 16 ++++++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/ninjalog_uploader.py b/ninjalog_uploader.py index f80339055..d8566bfc6 100755 --- a/ninjalog_uploader.py +++ b/ninjalog_uploader.py @@ -86,15 +86,26 @@ def GetBuildTargetFromCommandLine(cmdline): targets = [] while idx < len(cmdline): - if cmdline[idx] in onearg_flags: + arg = cmdline[idx] + if arg in onearg_flags: idx += 2 continue - if (cmdline[idx][:2] in onearg_flags or cmdline[idx] in zeroarg_flags): + if (arg[:2] in onearg_flags or arg in zeroarg_flags): idx += 1 continue - targets.append(cmdline[idx]) + # A target doesn't start with '-'. + if arg.startswith('-'): + idx += 1 + continue + + # Avoid uploading absolute paths accidentally. e.g. b/270907050 + if os.path.isabs(arg): + idx += 1 + continue + + targets.append(arg) idx += 1 return targets diff --git a/tests/ninjalog_uploader_test.py b/tests/ninjalog_uploader_test.py index 1e29783a2..087e2cdd5 100755 --- a/tests/ninjalog_uploader_test.py +++ b/tests/ninjalog_uploader_test.py @@ -122,6 +122,22 @@ class NinjalogUploaderTest(unittest.TestCase): ['python3', 'ninja.py', '-C', 'out/Release', 'chrome', 'all']), ['chrome', 'all']) + @unittest.skipIf(sys.platform == 'win32', 'posix path test') + def test_get_build_target_from_command_line_filter_posix(self): + self.assertEqual( + ninjalog_uploader.GetBuildTargetFromCommandLine([ + 'python3', 'ninja.py', '-C', 'out/Release', 'chrome', 'all', + '/path/to/foo', '-p' + ]), ['chrome', 'all']) + + @unittest.skipUnless(sys.platform == 'win32', 'Windows path test') + def test_get_build_target_from_command_line_filter_win(self): + self.assertEqual( + ninjalog_uploader.GetBuildTargetFromCommandLine([ + 'python3', 'ninja.py', '-C', 'out/Release', 'chrome', 'all', + 'C:\\path\\to\\foo', '-p' + ]), ['chrome', 'all']) + def test_get_j_flag(self): self.assertEqual(ninjalog_uploader.GetJflag( ['ninja']), None)