@@ -745,8 +745,10 @@ array_slice(arrayobject *a, Py_ssize_t ilow, Py_ssize_t ihigh)
745745 np = (arrayobject * ) newarrayobject (& Arraytype , ihigh - ilow , a -> ob_descr );
746746 if (np == NULL )
747747 return NULL ;
748- memcpy (np -> ob_item , a -> ob_item + ilow * a -> ob_descr -> itemsize ,
749- (ihigh - ilow ) * a -> ob_descr -> itemsize );
748+ if (ihigh > ilow ) {
749+ memcpy (np -> ob_item , a -> ob_item + ilow * a -> ob_descr -> itemsize ,
750+ (ihigh - ilow ) * a -> ob_descr -> itemsize );
751+ }
750752 return (PyObject * )np ;
751753}
752754
@@ -804,9 +806,13 @@ array_concat(arrayobject *a, PyObject *bb)
804806 if (np == NULL ) {
805807 return NULL ;
806808 }
807- memcpy (np -> ob_item , a -> ob_item , Py_SIZE (a )* a -> ob_descr -> itemsize );
808- memcpy (np -> ob_item + Py_SIZE (a )* a -> ob_descr -> itemsize ,
809- b -> ob_item , Py_SIZE (b )* b -> ob_descr -> itemsize );
809+ if (Py_SIZE (a ) > 0 ) {
810+ memcpy (np -> ob_item , a -> ob_item , Py_SIZE (a )* a -> ob_descr -> itemsize );
811+ }
812+ if (Py_SIZE (b ) > 0 ) {
813+ memcpy (np -> ob_item + Py_SIZE (a )* a -> ob_descr -> itemsize ,
814+ b -> ob_item , Py_SIZE (b )* b -> ob_descr -> itemsize );
815+ }
810816 return (PyObject * )np ;
811817#undef b
812818}
@@ -826,7 +832,7 @@ array_repeat(arrayobject *a, Py_ssize_t n)
826832 np = (arrayobject * ) newarrayobject (& Arraytype , size , a -> ob_descr );
827833 if (np == NULL )
828834 return NULL ;
829- if (n == 0 )
835+ if (size == 0 )
830836 return (PyObject * )np ;
831837 oldbytes = Py_SIZE (a ) * a -> ob_descr -> itemsize ;
832838 newbytes = oldbytes * n ;
@@ -985,8 +991,10 @@ array_do_extend(arrayobject *self, PyObject *bb)
985991 size = oldsize + Py_SIZE (b );
986992 if (array_resize (self , size ) == -1 )
987993 return -1 ;
988- memcpy (self -> ob_item + oldsize * self -> ob_descr -> itemsize ,
989- b -> ob_item , bbsize * b -> ob_descr -> itemsize );
994+ if (bbsize > 0 ) {
995+ memcpy (self -> ob_item + oldsize * self -> ob_descr -> itemsize ,
996+ b -> ob_item , bbsize * b -> ob_descr -> itemsize );
997+ }
990998
991999 return 0 ;
9921000#undef b
0 commit comments