summaryrefslogtreecommitdiff
path: root/numpy/core/src/arrayobject.c
diff options
context:
space:
mode:
Diffstat (limited to 'numpy/core/src/arrayobject.c')
-rw-r--r--numpy/core/src/arrayobject.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/numpy/core/src/arrayobject.c b/numpy/core/src/arrayobject.c
index bc99e1f30..34df74606 100644
--- a/numpy/core/src/arrayobject.c
+++ b/numpy/core/src/arrayobject.c
@@ -5903,27 +5903,35 @@ PyArray_NewFromDescr(PyTypeObject *subtype, PyArray_Descr *descr, int nd,
else {
descr->elsize = sizeof(PyArray_UCS4);
}
- sd = (size_t) descr->elsize;
+ sd = descr->elsize;
}
- largest = MAX_INTP / sd;
+
+ largest = NPY_MAX_INTP / sd;
for (i = 0; i < nd; i++) {
- if (dims[i] == 0) {
+ intp dim = dims[i];
+
+ if (dim == 0) {
+ /*
+ * Compare to PyArray_OverflowMultiplyList that
+ * returns 0 in this case.
+ */
continue;
}
- if (dims[i] < 0) {
+ if (dim < 0) {
PyErr_SetString(PyExc_ValueError,
"negative dimensions " \
"are not allowed");
Py_DECREF(descr);
return NULL;
}
- size *= dims[i];
- if (size > largest || size < 0) {
+ if (dim > largest) {
PyErr_SetString(PyExc_ValueError,
"dimensions too large.");
Py_DECREF(descr);
return NULL;
}
+ size *= dim;
+ largest /= dim;
}
self = (PyArrayObject *) subtype->tp_alloc(subtype, 0);
@@ -10883,7 +10891,7 @@ PyArray_Broadcast(PyArrayMultiIterObject *mit)
*/
tmp = PyArray_OverflowMultiplyList(mit->dimensions, mit->nd);
if (tmp < 0) {
- PyErr_SetString(PyExc_ValueError,
+ PyErr_SetString(PyExc_ValueError,
"broadcast dimensions too large.");
return -1;
}
@@ -11151,7 +11159,7 @@ PyArray_MapIterBind(PyArrayMapIterObject *mit, PyArrayObject *arr)
/* Here check the indexes (now that we have iteraxes) */
mit->size = PyArray_OverflowMultiplyList(mit->dimensions, mit->nd);
if (mit->size < 0) {
- PyErr_SetString(PyExc_ValueError,
+ PyErr_SetString(PyExc_ValueError,
"dimensions too large in fancy indexing");
goto fail;
}