Mercurial > cpython-lru_cache-weakref
diff Modules/arraymodule.c @ 24424:f4cd78b3b774 legacy-trunk
Fix for
[ 587875 ] crash on deleting extended slice
The array code got simpler, always a good thing!
| author | Michael W. Hudson <mwh@python.net> |
|---|---|
| date | Mon, 29 Jul 2002 14:35:04 +0000 |
| parents | c0a67a1cab09 |
| children | f66b3a3509c7 |
line wrap: on
line diff
--- a/Modules/arraymodule.c Mon Jul 29 14:27:41 2002 +0000 +++ b/Modules/arraymodule.c Mon Jul 29 14:35:04 2002 +0000 @@ -1564,7 +1564,7 @@ if (value == NULL) { /* delete slice */ - int cur, i; + int cur, i, extra; if (slicelength <= 0) return 0; @@ -1575,16 +1575,17 @@ 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;
