From: Guido van Rossum Date: Tue, 24 Dec 1991 13:27:34 +0000 (+0000) Subject: Fix assignment of a list to a slice of itself. X-Git-Tag: v0.9.8~672 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=32dffaa0164761fb94cffa32cfe01b3d0a83bf18;p=thirdparty%2FPython%2Fcpython.git Fix assignment of a list to a slice of itself. --- diff --git a/Objects/listobject.c b/Objects/listobject.c index 2e2b9a24f386..5811f406e483 100644 --- a/Objects/listobject.c +++ b/Objects/listobject.c @@ -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;