[New-bugs-announce] [issue31486] calling a _json.Encoder object raises a SystemError in case obj.items() returned a tuple
Oren Milman
report at bugs.python.org
Fri Sep 15 13:21:39 EDT 2017
New submission from Oren Milman:
the following code causes a SystemError:
import json.encoder
class BadDict(dict):
def items(self):
return ()
encoder = json.encoder.c_make_encoder(None, None, None, None, 'foo', 'bar',
True, None, None)
encoder(obj=BadDict({'spam': 42}), _current_indent_level=4)
this is because encoder_call() (in Modules/_json.c) passes the 'obj' argument
so that eventually encoder_listencode_dict() calls PyMapping_Items() on it.
encoder_listencode_dict() assumes that PyMapping_Items() returned a list, and
passes it to PyList_Sort().
ISTM that subclassing dict and implementing items() so that it returns a tuple
is not unrealistic.
maybe we should silently convert the tuple that PyMapping_Items() returned to a
list?
----------
components: Extension Modules
messages: 302278
nosy: Oren Milman
priority: normal
severity: normal
status: open
title: calling a _json.Encoder object raises a SystemError in case obj.items() returned a tuple
type: behavior
versions: Python 3.7
_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue31486>
_______________________________________
More information about the New-bugs-announce
mailing list