Skip to content

Commit 7ae3b1c

Browse files
committed
Use deepcopy for frame vars
1 parent 901a5e8 commit 7ae3b1c

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
@@ -614,7 +615,7 @@ def serialize_frame(
614615
)
615616

616617
if include_local_variables:
617-
rv["vars"] = frame.f_locals.copy()
618+
rv["vars"] = deepcopy(frame.f_locals)
618619

619620
return rv
620621

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)