From 6f8d4c1bfc75c3cbc467f981b64d2ac1d222128e Mon Sep 17 00:00:00 2001 From: "sentry-junior[bot]" <264270552+sentry-junior[bot]@users.noreply.github.com> Date: Tue, 3 Nov 2026 00:05:05 +0000 Subject: [PATCH] fix(sourcemaps): ignore non-string sourcemap headers --- src/sentry/api/endpoints/source_map_debug.py | 5 +++-- tests/sentry/api/endpoints/test_source_map_debug.py | 8 ++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/sentry/api/endpoints/source_map_debug.py b/src/sentry/api/endpoints/source_map_debug.py index 5c0d4366d101..7a649eeebb5e 100644 --- a/src/sentry/api/endpoints/source_map_debug.py +++ b/src/sentry/api/endpoints/source_map_debug.py @@ -1,6 +1,6 @@ import logging from collections.abc import Iterable, Mapping, Sequence -from typing import Any, Literal, NamedTuple, TypedDict, cast +from typing import Any, Literal, NamedTuple, TypedDict import sentry_sdk from django.db.models import Exists, OuterRef @@ -47,7 +47,8 @@ def _sourcemap_header(headers: Mapping[str, object]) -> str | None: - return cast("str | None", headers.get("sourcemap", headers.get("x-sourcemap"))) + value = headers.get("sourcemap", headers.get("x-sourcemap")) + return value if isinstance(value, str) else None from sentry.utils.urls import non_standard_url_join diff --git a/tests/sentry/api/endpoints/test_source_map_debug.py b/tests/sentry/api/endpoints/test_source_map_debug.py index d368179749d5..b3b0eceb5f84 100644 --- a/tests/sentry/api/endpoints/test_source_map_debug.py +++ b/tests/sentry/api/endpoints/test_source_map_debug.py @@ -15,6 +15,7 @@ MIN_JS_SDK_VERSION_FOR_DEBUG_IDS, ReleaseBundleUrls, SourceMapReleaseProcessResult, + _sourcemap_header, get_release_bundle_urls, report_unsuccessful_url_matches, ) @@ -34,6 +35,13 @@ from sentry.testutils.helpers.options import override_options from sentry.testutils.skips import requires_snuba + +def test_sourcemap_header_ignores_non_strings() -> None: + assert _sourcemap_header({"sourcemap": "foo"}) == "foo" + assert _sourcemap_header({"x-sourcemap": "bar"}) == "bar" + assert _sourcemap_header({"sourcemap": 1}) is None + + pytestmark = [requires_snuba]