Skip to content

Commit 25d07de

Browse files
committed
fix: Do not let exceptions in before_breadcrumb bubble up
1 parent 77a68fe commit 25d07de

2 files changed

Lines changed: 31 additions & 3 deletions

File tree

sentry_sdk/scope.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1090,10 +1090,10 @@ def add_breadcrumb(
10901090
if crumb.get("type") is None:
10911091
crumb["type"] = "default"
10921092

1093+
new_crumb = crumb
10931094
if before_breadcrumb is not None:
1094-
new_crumb = before_breadcrumb(crumb, hint)
1095-
else:
1096-
new_crumb = crumb
1095+
with capture_internal_exceptions():
1096+
new_crumb = before_breadcrumb(crumb, hint)
10971097

10981098
if new_crumb is not None:
10991099
self._breadcrumbs.append(new_crumb)

tests/test_basics.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,34 @@ def do_this():
250250
assert crumb["type"] == "default"
251251

252252

253+
@pytest.mark.tests_internal_exceptions
254+
def test_option_before_breadcrumb_exception(sentry_init, capture_events):
255+
"""Exceptions in before_breadcrumb are contained."""
256+
257+
def before_breadcrumb(crumb, hint):
258+
1 / 0
259+
260+
sentry_init(before_breadcrumb=before_breadcrumb)
261+
events = capture_events()
262+
263+
def do_this():
264+
add_breadcrumb(message="Hello", hint={"foo": 42})
265+
try:
266+
raise ValueError("aha!")
267+
except Exception:
268+
capture_exception()
269+
270+
do_this()
271+
272+
(event,) = events
273+
274+
assert event["exception"]["values"][0]["type"] == "ValueError"
275+
(crumb,) = event["breadcrumbs"]["values"]
276+
assert "timestamp" in crumb
277+
assert crumb["message"] == "Hello"
278+
assert crumb["type"] == "default"
279+
280+
253281
@pytest.mark.parametrize(
254282
"enable_tracing, traces_sample_rate, tracing_enabled, updated_traces_sample_rate",
255283
[

0 commit comments

Comments
 (0)