Skip to content

Commit a27dbcd

Browse files
Rahul Yadavgerrit-scoped@luci-project-accounts.iam.gserviceaccount.com
authored andcommitted
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 <gavinmak@google.com> Tested-by: Rahul Yadav <yadavrah@google.com> Commit-Queue: Rahul Yadav <yadavrah@google.com>
1 parent 547dc99 commit a27dbcd

2 files changed

Lines changed: 9 additions & 2 deletions

File tree

git_trace2_event_log_base.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,13 @@ def DefParamRepoEvents(self, config):
195195

196196
def GetDataEventName(self, value):
197197
"""Returns 'data-json' if the value is an array else returns 'data'."""
198-
return "data-json" if value[0] == "[" and value[-1] == "]" else "data"
198+
return (
199+
"data-json"
200+
if isinstance(value, str)
201+
and value.startswith("[")
202+
and value.endswith("]")
203+
else "data"
204+
)
199205

200206
def LogDataConfigEvents(self, config, prefix):
201207
"""Append a 'data' event for each entry in |config| to the current log.

tests/test_git_trace2_event_log.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,7 @@ def test_data_event_config(event_log: git_trace2_event_log.EventLog) -> None:
315315
"repo.partialclone": "false",
316316
"repo.syncstate.superproject.hassuperprojecttag": "true",
317317
"repo.syncstate.superproject.sys.argv": ["--", "sync", "protobuf"],
318+
"repo.syncstate.emptykey": "",
318319
}
319320
prefix_value = "prefix"
320321
event_log.LogDataConfigEvents(config, prefix_value)
@@ -323,7 +324,7 @@ def test_data_event_config(event_log: git_trace2_event_log.EventLog) -> None:
323324
log_path = event_log.Write(path=tempdir)
324325
log_data = read_log(log_path)
325326

326-
assert len(log_data) == 5
327+
assert len(log_data) == 6
327328
data_events = log_data[1:]
328329
verify_common_keys(log_data[0], expected_event_name="version")
329330

0 commit comments

Comments
 (0)