File tree Expand file tree Collapse file tree 1 file changed +33
-0
lines changed
Expand file tree Collapse file tree 1 file changed +33
-0
lines changed Original file line number Diff line number Diff 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
69102class TestPyDump (TestDump , PyTest ): pass
70103
You can’t perform that action at this time.
0 commit comments