Showing the changes to python/ext (1 of 1 file). Show all
Unified · Split
| @@ -35,7 +35,13 @@ PyAubio_ArrayToCFvec (PyObject *input) { · 34 unmodified lines | ||
| 35 | 35 | // vec = new_fvec (vec->length); |
| 36 | 36 | // no need to really allocate fvec, just its struct member |
| 37 | 37 | vec = (fvec_t *)malloc(sizeof(fvec_t)); |
| 38 | − vec->length = PyArray_SIZE ((PyArrayObject *)array); | |
| 38 | + long length = PyArray_SIZE ((PyArrayObject *)array); | |
| 39 | + if (length > 0) { | |
| 40 | + vec->length = (uint_t)length; | |
| 41 | + } else { | |
| 42 | + PyErr_SetString (PyExc_ValueError, "input array size should be greater than 0"); | |
| 43 | + goto fail; | |
| 44 | + } | |
| 39 | 45 | vec->data = (smpl_t *) PyArray_GETPTR1 ((PyArrayObject *)array, 0); |
| 40 | 46 | |
| 41 | 47 | } else if (PyObject_TypeCheck (input, &PyList_Type)) { |
| @@ -130,8 +136,20 @@ PyAubio_ArrayToCFmat (PyObject *input) { · 88 unmodified lines | ||
| 130 | 136 | |
| 131 | 137 | // no need to really allocate fvec, just its struct member |
| 132 | 138 | mat = (fmat_t *)malloc(sizeof(fmat_t)); |
| 133 | − mat->length = PyArray_DIM ((PyArrayObject *)array, 1); | |
| 134 | − mat->height = PyArray_DIM ((PyArrayObject *)array, 0); | |
| 139 | + long length = PyArray_DIM ((PyArrayObject *)array, 1); | |
| 140 | + if (length > 0) { | |
| 141 | + mat->length = (uint_t)length; | |
| 142 | + } else { | |
| 143 | + PyErr_SetString (PyExc_ValueError, "input array dimension 1 should be greater than 0"); | |
| 144 | + goto fail; | |
| 145 | + } | |
| 146 | + long height = PyArray_DIM ((PyArrayObject *)array, 0); | |
| 147 | + if (height > 0) { | |
| 148 | + mat->height = (uint_t)height; | |
| 149 | + } else { | |
| 150 | + PyErr_SetString (PyExc_ValueError, "input array dimension 0 should be greater than 0"); | |
| 151 | + goto fail; | |
| 152 | + } | |
| 135 | 153 | mat->data = (smpl_t **)malloc(sizeof(smpl_t*) * mat->height); |
| 136 | 154 | for (i=0; i< mat->height; i++) { |
| 137 | 155 | mat->data[i] = (smpl_t*)PyArray_GETPTR1 ((PyArrayObject *)array, i); |