Skip to content

Commit 7f6f4ee

Browse files
committed
Make a deeper copy of the vars object
1 parent 81f5ce6 commit 7f6f4ee

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

sentry_sdk/utils.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import sys
1111
import threading
1212
import time
13+
from copy import deepcopy
1314
from collections import namedtuple
1415
from datetime import datetime
1516
from decimal import Decimal
@@ -616,7 +617,7 @@ def serialize_frame(
616617
)
617618

618619
if include_local_variables:
619-
rv["vars"] = frame.f_locals.copy()
620+
rv["vars"] = deepcopy(frame.f_locals)
620621

621622
return rv
622623

tests/test_scrubber.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,3 +187,20 @@ def test_recursive_event_scrubber(sentry_init, capture_events):
187187

188188
(event,) = events
189189
assert event["extra"]["deep"]["deeper"][0]["deepest"]["password"] == "'[Filtered]'"
190+
191+
192+
def test_recursive_scrubber_does_not_override_original(sentry_init, capture_events):
193+
sentry_init(event_scrubber=EventScrubber(recursive=True))
194+
events = capture_events()
195+
196+
data = {"csrf": "secret"}
197+
try:
198+
raise RuntimeError("An error")
199+
except Exception:
200+
capture_exception()
201+
202+
(event,) = events
203+
frames = event["exception"]["values"][0]["stacktrace"]["frames"]
204+
(frame,) = frames
205+
assert data["csrf"] == "secret"
206+
assert frame["vars"]["data"]["csrf"] == "[Filtered]"

0 commit comments

Comments
 (0)