From fa61c4ea06cf5cec2a88961b11d296fe6c95de8a Mon Sep 17 00:00:00 2001 From: Joshua Li Date: Sat, 31 Oct 2026 11:02:56 -0700 Subject: [PATCH] fix(artifactbundle): reject non-string debug ids Manifest headers come from uploaded archives. Treat any non-string debug-id value as absent instead of passing it into symbolic, and drop the casts that assumed the header value was always a string. --- src/sentry/models/artifactbundle.py | 4 ++-- tests/sentry/debug_files/test_artifact_bundles.py | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/sentry/models/artifactbundle.py b/src/sentry/models/artifactbundle.py index d71207c51978..30b847ed6509 100644 --- a/src/sentry/models/artifactbundle.py +++ b/src/sentry/models/artifactbundle.py @@ -253,8 +253,8 @@ def normalize_headers(headers: dict) -> dict: return {k.lower(): v for k, v in headers.items()} @staticmethod - def normalize_debug_id(debug_id: str | None) -> str | None: - if debug_id is None: + def normalize_debug_id(debug_id: object) -> str | None: + if not isinstance(debug_id, str): return None try: diff --git a/tests/sentry/debug_files/test_artifact_bundles.py b/tests/sentry/debug_files/test_artifact_bundles.py index 1b2fc59d404b..f8dcc24f9cc7 100644 --- a/tests/sentry/debug_files/test_artifact_bundles.py +++ b/tests/sentry/debug_files/test_artifact_bundles.py @@ -102,6 +102,15 @@ def get_indexed_files(project, release_name="", dist_name="", distinct=False): return list(query) +def test_normalize_debug_id_rejects_non_strings() -> None: + assert ArtifactBundleArchive.normalize_debug_id(None) is None + assert ArtifactBundleArchive.normalize_debug_id(123) is None + assert ( + ArtifactBundleArchive.normalize_debug_id("aaaaaaaa-0000-0000-0000-000000000000") + == "aaaaaaaa-0000-0000-0000-000000000000" + ) + + class ArtifactLookupTest(TestCase): def clear_cache(self): redis_client = get_redis_cluster_for_artifact_bundles()