[3.6] bpo-30936: Fix a reference leak in json when fail to sort keys.… · python/cpython@a819e5e (original) (raw)

2 files changed

lines changed

Original file line number Diff line number Diff line change
@@ -44,3 +44,7 @@ def test(name):
44 44 self.assertRaises(ZeroDivisionError, test, 'check_circular')
45 45 self.assertRaises(ZeroDivisionError, test, 'allow_nan')
46 46 self.assertRaises(ZeroDivisionError, test, 'sort_keys')
47 +
48 +def test_unsortable_keys(self):
49 +with self.assertRaises(TypeError):
50 +self.json.encoder.JSONEncoder(sort_keys=True).encode({'a': 1, 1: 'a'})
Original file line number Diff line number Diff line change
@@ -1601,8 +1601,10 @@ encoder_listencode_dict(PyEncoderObject *s, _PyAccu *acc,
1601 1601 if (items == NULL)
1602 1602 goto bail;
1603 1603 sortkeys = PyObject_IsTrue(s->sort_keys);
1604 -if (sortkeys < 0 |
1604 +if (sortkeys < 0 |
1605 +Py_DECREF(items);
1605 1606 goto bail;
1607 + }
1606 1608 it = PyObject_GetIter(items);
1607 1609 Py_DECREF(items);
1608 1610 if (it == NULL)