Commit b16e382c authored by Zackery Spytz's avatar Zackery Spytz Committed by Serhiy Storchaka

bpo-38202: Fix a crash in dict_view & non-itearble. (GH-16241)

parent 793cb854
...@@ -227,6 +227,25 @@ class DictSetTest(unittest.TestCase): ...@@ -227,6 +227,25 @@ class DictSetTest(unittest.TestCase):
self.assertEqual(items | iter([(1, 2)]), {(1, 2), (3, 4)}) self.assertEqual(items | iter([(1, 2)]), {(1, 2), (3, 4)})
self.assertEqual(items - iter([(1, 2)]), {(3, 4)}) self.assertEqual(items - iter([(1, 2)]), {(3, 4)})
def test_set_operations_with_noniterable(self):
with self.assertRaises(TypeError):
{}.keys() & 1
with self.assertRaises(TypeError):
{}.keys() | 1
with self.assertRaises(TypeError):
{}.keys() ^ 1
with self.assertRaises(TypeError):
{}.keys() - 1
with self.assertRaises(TypeError):
{}.items() & 1
with self.assertRaises(TypeError):
{}.items() | 1
with self.assertRaises(TypeError):
{}.items() ^ 1
with self.assertRaises(TypeError):
{}.items() - 1
def test_recursive_repr(self): def test_recursive_repr(self):
d = {} d = {}
d[42] = d.values() d[42] = d.values()
......
...@@ -4227,6 +4227,10 @@ _PyDictView_Intersect(PyObject* self, PyObject *other) ...@@ -4227,6 +4227,10 @@ _PyDictView_Intersect(PyObject* self, PyObject *other)
return NULL; return NULL;
it = PyObject_GetIter(other); it = PyObject_GetIter(other);
if (it == NULL) {
Py_DECREF(result);
return NULL;
}
if (PyDictKeys_Check(self)) { if (PyDictKeys_Check(self)) {
dict_contains = dictkeys_contains; dict_contains = dictkeys_contains;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment