]> granicus.if.org Git - python/commitdiff
Issue 6573: Fix set.union() for cases where self is in the argument chain.
authorRaymond Hettinger <python@rcn.com>
Mon, 27 Jul 2009 20:33:25 +0000 (20:33 +0000)
committerRaymond Hettinger <python@rcn.com>
Mon, 27 Jul 2009 20:33:25 +0000 (20:33 +0000)
Lib/test/test_set.py
Misc/NEWS
Objects/setobject.c

index 886c4b8db36b9c1663b58dff712cf13a9b8febea..8a5f6602a809b8384e3049dc8f6ca5d7c0ca6b71 100644 (file)
@@ -81,6 +81,10 @@ class TestJointOps(unittest.TestCase):
             self.assertEqual(self.thetype('abcba').union(C('ef')), set('abcef'))
             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):
         i = self.s.union(self.otherword)
         self.assertEqual(self.s | set(self.otherword), i)
index cbc07a14a9bac09690b84946d671eff3ef002d7c..3edf5572cb758bfa7d6687893b255cdff708f879 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -14,6 +14,9 @@ Core and Builtins
 
 - 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
   from the .py file to the .pyc file if it is set.
 
index a55bbb70adb950228448ed7e6ea2b5097dd42d03..dd45380a35feb48017a8281d3e51c535d48c12ca 100644 (file)
@@ -1183,7 +1183,7 @@ set_union(PySetObject *so, PyObject *args)
        for (i=0 ; i<PyTuple_GET_SIZE(args) ; i++) {
                other = PyTuple_GET_ITEM(args, i);
                if ((PyObject *)so == other)
-                       return (PyObject *)result;
+                       continue;
                if (set_update_internal(result, other) == -1) {
                        Py_DECREF(result);
                        return NULL;