Commit e21624fb authored by Daniel Stutzbach's avatar Daniel Stutzbach

Merged revisions 84301 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r84301 | daniel.stutzbach | 2010-08-24 15:49:57 -0500 (Tue, 24 Aug 2010) | 1 line

  Issue 8750: Fixed MutableSet's methods to correctly handle reflexive operations, namely x -= x and x ^= x
........
parent ed2ce469
......@@ -321,18 +321,24 @@ class MutableSet(Set):
return self
def __ixor__(self, it: Iterable):
if not isinstance(it, Set):
it = self._from_iterable(it)
for value in it:
if value in self:
self.discard(value)
else:
self.add(value)
if it is self:
self.clear()
else:
if not isinstance(it, Set):
it = self._from_iterable(it)
for value in it:
if value in self:
self.discard(value)
else:
self.add(value)
return self
def __isub__(self, it: Iterable):
for value in it:
self.discard(value)
if it is self:
self.clear()
else:
for value in it:
self.discard(value)
return self
MutableSet.register(set)
......
......@@ -494,6 +494,21 @@ class TestCollectionABCs(ABCTestCase):
s = MySet([5,43,2,1])
self.assertEqual(s.pop(), 1)
def test_issue8750(self):
empty = WithSet()
full = WithSet(range(10))
s = WithSet(full)
s -= s
self.assertEqual(s, empty)
s = WithSet(full)
s ^= s
self.assertEqual(s, empty)
s = WithSet(full)
s &= s
self.assertEqual(s, full)
s |= s
self.assertEqual(s, full)
def test_Mapping(self):
for sample in [dict]:
self.assertTrue(isinstance(sample(), Mapping))
......
......@@ -95,6 +95,9 @@ C-API
Library
-------
- Issue #8750: Fixed MutableSet's methods to correctly handle
reflexive operations, namely x -= x and x ^= x.
- Issue #9129: smtpd.py is vulnerable to DoS attacks deriving from missing
error handling when accepting a new connection.
......
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