From a27dbcdb7bba1b8a2cc84112fa31c8f9f818604e Mon Sep 17 00:00:00 2001 From: Rahul Yadav Date: Mon, 29 Jun 2026 09:27:57 +0000 Subject: [PATCH] git_trace2_event_log: Fix index out of range on empty config values In git_trace2_event_log_base.py's GetDataEventName method, it parses value to identify if it represents a JSON list. When a config key has an empty string value, GetDataEventName evaluates value[0], which raises IndexError: string index out of range. This change fixes the crash by checking if the value is a string and using startswith/endswith to check for JSON lists instead of direct indexing. Test: PYTHONPATH=. pytest tests/test_git_trace2_event_log.py Bug: 512518342 TAG=agy CONV=ff5d70d7-e5b3-42b3-8f16-23b9e3070754 Change-Id: Ic40a8c6a22df57d0e97f268f6e1bc8a14a5024a4 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/602201 Reviewed-by: Gavin Mak Tested-by: Rahul Yadav Commit-Queue: Rahul Yadav --- git_trace2_event_log_base.py | 8 +++++++- tests/test_git_trace2_event_log.py | 3 ++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/git_trace2_event_log_base.py b/git_trace2_event_log_base.py index 1a59fee8a..063d101c6 100644 --- a/git_trace2_event_log_base.py +++ b/git_trace2_event_log_base.py @@ -195,7 +195,13 @@ class BaseEventLog: def GetDataEventName(self, value): """Returns 'data-json' if the value is an array else returns 'data'.""" - return "data-json" if value[0] == "[" and value[-1] == "]" else "data" + return ( + "data-json" + if isinstance(value, str) + and value.startswith("[") + and value.endswith("]") + else "data" + ) def LogDataConfigEvents(self, config, prefix): """Append a 'data' event for each entry in |config| to the current log. diff --git a/tests/test_git_trace2_event_log.py b/tests/test_git_trace2_event_log.py index 9a6ba2052..13b64df2d 100644 --- a/tests/test_git_trace2_event_log.py +++ b/tests/test_git_trace2_event_log.py @@ -315,6 +315,7 @@ def test_data_event_config(event_log: git_trace2_event_log.EventLog) -> None: "repo.partialclone": "false", "repo.syncstate.superproject.hassuperprojecttag": "true", "repo.syncstate.superproject.sys.argv": ["--", "sync", "protobuf"], + "repo.syncstate.emptykey": "", } prefix_value = "prefix" event_log.LogDataConfigEvents(config, prefix_value) @@ -323,7 +324,7 @@ def test_data_event_config(event_log: git_trace2_event_log.EventLog) -> None: log_path = event_log.Write(path=tempdir) log_data = read_log(log_path) - assert len(log_data) == 5 + assert len(log_data) == 6 data_events = log_data[1:] verify_common_keys(log_data[0], expected_event_name="version")