Kaydet (Commit) b904e425 authored tarafından Andrew Svetlov's avatar Andrew Svetlov

Merge issue #16373: Prevent infinite recursion for ABC Set class operations.

Patch by Serhiy Storchaka.
...@@ -200,12 +200,12 @@ class Set(Sized, Iterable, Container): ...@@ -200,12 +200,12 @@ class Set(Sized, Iterable, Container):
def __gt__(self, other): def __gt__(self, other):
if not isinstance(other, Set): if not isinstance(other, Set):
return NotImplemented return NotImplemented
return other < self return other.__lt__(self)
def __ge__(self, other): def __ge__(self, other):
if not isinstance(other, Set): if not isinstance(other, Set):
return NotImplemented return NotImplemented
return other <= self return other.__le__(self)
def __eq__(self, other): def __eq__(self, other):
if not isinstance(other, Set): if not isinstance(other, Set):
......
...@@ -663,6 +663,39 @@ class TestCollectionABCs(ABCTestCase): ...@@ -663,6 +663,39 @@ class TestCollectionABCs(ABCTestCase):
s |= s s |= s
self.assertEqual(s, full) self.assertEqual(s, full)
def test_issue16373(self):
# Recursion error comparing comparable and noncomparable
# Set instances
class MyComparableSet(Set):
def __contains__(self, x):
return False
def __len__(self):
return 0
def __iter__(self):
return iter([])
class MyNonComparableSet(Set):
def __contains__(self, x):
return False
def __len__(self):
return 0
def __iter__(self):
return iter([])
def __le__(self, x):
return NotImplemented
def __lt__(self, x):
return NotImplemented
cs = MyComparableSet()
ncs = MyNonComparableSet()
with self.assertRaises(TypeError):
ncs < cs
with self.assertRaises(TypeError):
ncs <= cs
with self.assertRaises(TypeError):
cs > ncs
with self.assertRaises(TypeError):
cs >= ncs
def test_Mapping(self): def test_Mapping(self):
for sample in [dict]: for sample in [dict]:
self.assertIsInstance(sample(), Mapping) self.assertIsInstance(sample(), Mapping)
......
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