]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Fix assignment of a list to a slice of itself.
authorGuido van Rossum <guido@python.org>
Tue, 24 Dec 1991 13:27:34 +0000 (13:27 +0000)
committerGuido van Rossum <guido@python.org>
Tue, 24 Dec 1991 13:27:34 +0000 (13:27 +0000)
Objects/listobject.c

index 2e2b9a24f3866c8127c38f36aa91254430aab2b5..5811f406e483d3860f0b308aec7fd0c7adc2ec3b 100644 (file)
@@ -357,8 +357,17 @@ list_ass_slice(a, ilow, ihigh, v)
 #define b ((listobject *)v)
        if (v == NULL)
                n = 0;
-       else if (is_listobject(v))
+       else if (is_listobject(v)) {
                n = b->ob_size;
+               if (a == b) {
+                       /* Special case "a[i:j] = a" -- copy b first */
+                       int ret;
+                       v = list_slice(b, 0, n);
+                       ret = list_ass_slice(a, ilow, ihigh, v);
+                       DECREF(v);
+                       return ret;
+               }
+       }
        else {
                err_badarg();
                return -1;