Issue 6573: Fix set.union() for cases where self is in the argument chain.

This commit is contained in:
Raymond Hettinger 2009-07-27 20:29:18 +00:00
parent 7bc66b1009
commit 63853bbdc4
3 changed files with 8 additions and 1 deletions

View File

@ -82,6 +82,10 @@ def test_union(self):
self.assertEqual(self.thetype('abcba').union(C('ef')), set('abcef')) self.assertEqual(self.thetype('abcba').union(C('ef')), set('abcef'))
self.assertEqual(self.thetype('abcba').union(C('ef'), C('fg')), set('abcefg')) self.assertEqual(self.thetype('abcba').union(C('ef'), C('fg')), set('abcefg'))
# Issue #6573
x = self.thetype()
self.assertEqual(x.union(set([1]), x, set([2])), self.thetype([1, 2]))
def test_or(self): def test_or(self):
i = self.s.union(self.otherword) i = self.s.union(self.otherword)
self.assertEqual(self.s | set(self.otherword), i) self.assertEqual(self.s | set(self.otherword), i)

View File

@ -14,6 +14,9 @@ Core and Builtins
- Issue #6540: Fixed crash for bytearray.translate() with invalid parameters. - Issue #6540: Fixed crash for bytearray.translate() with invalid parameters.
- Issue #6573: set.union() stopped processing inputs if an instance of self
occurred in the argument chain.
- Issue #6070: On posix platforms import no longer copies the execute bit - Issue #6070: On posix platforms import no longer copies the execute bit
from the .py file to the .pyc file if it is set. from the .py file to the .pyc file if it is set.

View File

@ -1187,7 +1187,7 @@ set_union(PySetObject *so, PyObject *args)
for (i=0 ; i<PyTuple_GET_SIZE(args) ; i++) { for (i=0 ; i<PyTuple_GET_SIZE(args) ; i++) {
other = PyTuple_GET_ITEM(args, i); other = PyTuple_GET_ITEM(args, i);
if ((PyObject *)so == other) if ((PyObject *)so == other)
return (PyObject *)result; continue;
if (set_update_internal(result, other) == -1) { if (set_update_internal(result, other) == -1) {
Py_DECREF(result); Py_DECREF(result);
return NULL; return NULL;