Skip to content

Commit 64fcd75

Browse files
committed
add test
1 parent b153c2a commit 64fcd75

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

Lib/test/test_json/test_dump.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,39 @@ def __lt__(self, o):
6565
d[1337] = "true.dat"
6666
self.assertEqual(self.dumps(d, sort_keys=True), '{"1337": "true.dat"}')
6767

68+
def test_mutate_items_during_encode(self):
69+
c_make_encoder = getattr(self.json.encoder, 'c_make_encoder', None)
70+
if c_make_encoder is None:
71+
self.skipTest("c_make_encoder not available")
72+
73+
cache = []
74+
75+
class BadDict(dict):
76+
def __init__(self):
77+
super().__init__(real=1)
78+
79+
def items(self):
80+
entries = [("boom", object())]
81+
cache.append(entries)
82+
return entries
83+
84+
def encode_str(obj):
85+
if cache:
86+
cache.pop().clear()
87+
return '"x"'
88+
89+
encoder = c_make_encoder(
90+
None, lambda o: "null",
91+
encode_str, None,
92+
": ", ", ", False,
93+
False, True
94+
)
95+
96+
try:
97+
encoder(BadDict(), 0)
98+
except (ValueError, RuntimeError, SystemError):
99+
pass
100+
68101

69102
class TestPyDump(TestDump, PyTest): pass
70103

0 commit comments

Comments
 (0)