From 32dffaa0164761fb94cffa32cfe01b3d0a83bf18 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Tue, 24 Dec 1991 13:27:34 +0000 Subject: Fix assignment of a list to a slice of itself. --- Objects/listobject.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Objects/listobject.c b/Objects/listobject.c index 2e2b9a2..5811f40 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; -- cgit v0.12