From: Antoine Pitrou <solipsis@pitrou.net> Date: Sun, 11 Jul 2010 12:12:00 +0000 (+0000) Subject: Issue #7616: Fix copying of overlapping memoryview slices with the Intel X-Git-Tag: v3.2a1~224 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1ac745b5c52ab349e58f633d0a9d73cdb0e7b818;p=python Issue #7616: Fix copying of overlapping memoryview slices with the Intel compiler. --- diff --git a/Misc/NEWS b/Misc/NEWS index dbfc4c5d68..0c11639aa1 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,9 @@ What's New in Python 3.2 Alpha 1? Core and Builtins ----------------- +- Issue #7616: Fix copying of overlapping memoryview slices with the Intel + compiler. + - Issue #8413: structsequence now subclasses tuple. - Issue #8271: during the decoding of an invalid UTF-8 byte sequence, only the diff --git a/Objects/memoryobject.c b/Objects/memoryobject.c index e92a771dfd..5b3caf272c 100644 --- a/Objects/memoryobject.c +++ b/Objects/memoryobject.c @@ -624,7 +624,7 @@ memory_subscript(PyMemoryViewObject *self, PyObject *key) static int memory_ass_sub(PyMemoryViewObject *self, PyObject *key, PyObject *value) { - Py_ssize_t start, len, bytelen, i; + Py_ssize_t start, len, bytelen; Py_buffer srcview; Py_buffer *view = &(self->view); char *srcbuf, *destbuf; @@ -694,16 +694,8 @@ memory_ass_sub(PyMemoryViewObject *self, PyObject *key, PyObject *value) if (destbuf + bytelen < srcbuf || srcbuf + bytelen < destbuf) /* No overlapping */ memcpy(destbuf, srcbuf, bytelen); - else if (destbuf < srcbuf) { - /* Copy in ascending order */ - for (i = 0; i < bytelen; i++) - destbuf[i] = srcbuf[i]; - } - else { - /* Copy in descencing order */ - for (i = bytelen - 1; i >= 0; i--) - destbuf[i] = srcbuf[i]; - } + else + memmove(destbuf, srcbuf, bytelen); PyBuffer_Release(&srcview); return 0;