Issue #16373: Prevent infinite recursion for ABC Set class comparisons.
This commit is contained in:
parent
d919da9942
commit
7c573857c7
|
@ -165,12 +165,12 @@ class Set(Sized, Iterable, Container):
|
|||
def __gt__(self, other):
|
||||
if not isinstance(other, Set):
|
||||
return NotImplemented
|
||||
return other < self
|
||||
return other.__lt__(self)
|
||||
|
||||
def __ge__(self, other):
|
||||
if not isinstance(other, Set):
|
||||
return NotImplemented
|
||||
return other <= self
|
||||
return other.__le__(self)
|
||||
|
||||
def __eq__(self, other):
|
||||
if not isinstance(other, Set):
|
||||
|
|
|
@ -594,6 +594,35 @@ class TestCollectionABCs(ABCTestCase):
|
|||
s |= s
|
||||
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()
|
||||
self.assertFalse(ncs < cs)
|
||||
self.assertFalse(ncs <= cs)
|
||||
self.assertFalse(cs > ncs)
|
||||
self.assertFalse(cs >= ncs)
|
||||
|
||||
def test_Mapping(self):
|
||||
for sample in [dict]:
|
||||
self.assertIsInstance(sample(), Mapping)
|
||||
|
|
|
@ -15,6 +15,8 @@ Core and Builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Issue #16373: Prevent infinite recursion for ABC Set class comparisons.
|
||||
|
||||
- Issue #19138: doctest's IGNORE_EXCEPTION_DETAIL now allows a match when
|
||||
no exception detail exists (no colon following the exception's name, or
|
||||
a colon does follow but no text follows the colon).
|
||||
|
|
Loading…
Reference in New Issue