@@ -740,8 +740,10 @@ array_slice(arrayobject *a, Py_ssize_t ilow, Py_ssize_t ihigh)
740740 np = (arrayobject * ) newarrayobject (& Arraytype , ihigh - ilow , a -> ob_descr );
741741 if (np == NULL )
742742 return NULL ;
743- memcpy (np -> ob_item , a -> ob_item + ilow * a -> ob_descr -> itemsize ,
744- (ihigh - ilow ) * a -> ob_descr -> itemsize );
743+ if (ihigh > ilow ) {
744+ memcpy (np -> ob_item , a -> ob_item + ilow * a -> ob_descr -> itemsize ,
745+ (ihigh - ilow ) * a -> ob_descr -> itemsize );
746+ }
745747 return (PyObject * )np ;
746748}
747749
@@ -799,9 +801,13 @@ array_concat(arrayobject *a, PyObject *bb)
799801 if (np == NULL ) {
800802 return NULL ;
801803 }
802- memcpy (np -> ob_item , a -> ob_item , Py_SIZE (a )* a -> ob_descr -> itemsize );
803- memcpy (np -> ob_item + Py_SIZE (a )* a -> ob_descr -> itemsize ,
804- b -> ob_item , Py_SIZE (b )* b -> ob_descr -> itemsize );
804+ if (Py_SIZE (a ) > 0 ) {
805+ memcpy (np -> ob_item , a -> ob_item , Py_SIZE (a )* a -> ob_descr -> itemsize );
806+ }
807+ if (Py_SIZE (b ) > 0 ) {
808+ memcpy (np -> ob_item + Py_SIZE (a )* a -> ob_descr -> itemsize ,
809+ b -> ob_item , Py_SIZE (b )* b -> ob_descr -> itemsize );
810+ }
805811 return (PyObject * )np ;
806812#undef b
807813}
@@ -821,7 +827,7 @@ array_repeat(arrayobject *a, Py_ssize_t n)
821827 np = (arrayobject * ) newarrayobject (& Arraytype , size , a -> ob_descr );
822828 if (np == NULL )
823829 return NULL ;
824- if (n == 0 )
830+ if (size == 0 )
825831 return (PyObject * )np ;
826832 oldbytes = Py_SIZE (a ) * a -> ob_descr -> itemsize ;
827833 newbytes = oldbytes * n ;
@@ -942,8 +948,10 @@ array_do_extend(arrayobject *self, PyObject *bb)
942948 size = oldsize + Py_SIZE (b );
943949 if (array_resize (self , size ) == -1 )
944950 return -1 ;
945- memcpy (self -> ob_item + oldsize * self -> ob_descr -> itemsize ,
946- b -> ob_item , bbsize * b -> ob_descr -> itemsize );
951+ if (bbsize > 0 ) {
952+ memcpy (self -> ob_item + oldsize * self -> ob_descr -> itemsize ,
953+ b -> ob_item , bbsize * b -> ob_descr -> itemsize );
954+ }
947955
948956 return 0 ;
949957#undef b
0 commit comments