From 56796f672fb571d80199cf08aa059db9df55257b Mon Sep 17 00:00:00 2001 From: "Michael W. Hudson" Date: Mon, 29 Jul 2002 14:35:04 +0000 Subject: Fix for [ 587875 ] crash on deleting extended slice The array code got simpler, always a good thing! --- Modules/arraymodule.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'Modules/arraymodule.c') diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index 8a79027d6a..e757d9f494 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -1564,7 +1564,7 @@ array_ass_subscr(arrayobject* self, PyObject* item, PyObject* value) if (value == NULL) { /* delete slice */ - int cur, i; + int cur, i, extra; if (slicelength <= 0) return 0; @@ -1575,16 +1575,17 @@ array_ass_subscr(arrayobject* self, PyObject* item, PyObject* value) step = -step; } - for (cur = start, i = 0; cur < stop; + for (cur = start, i = 0; i < slicelength - 1; cur += step, i++) { memmove(self->ob_item + (cur - i)*itemsize, self->ob_item + (cur + 1)*itemsize, (step - 1) * itemsize); } - if (self->ob_size > (start + slicelength*step)) { - memmove(self->ob_item + (start + slicelength*(step - 1))*itemsize, - self->ob_item + (start + slicelength*step)*itemsize, - (self->ob_size - (start + slicelength*step))*itemsize); + extra = self->ob_size - (cur + 1); + if (extra > 0) { + memmove(self->ob_item + (cur - i)*itemsize, + self->ob_item + (cur + 1)*itemsize, + extra*itemsize); } self->ob_size -= slicelength; -- cgit v1.2.1