[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) |