diff options
-rw-r--r-- | numpy/core/src/multiarray/item_selection.c | 3 | ||||
-rw-r--r-- | numpy/core/tests/test_regression.py | 11 |
2 files changed, 14 insertions, 0 deletions
diff --git a/numpy/core/src/multiarray/item_selection.c b/numpy/core/src/multiarray/item_selection.c index 3a4b7cbcc..5538627dd 100644 --- a/numpy/core/src/multiarray/item_selection.c +++ b/numpy/core/src/multiarray/item_selection.c @@ -1681,6 +1681,9 @@ PyArray_LexSort(PyObject *sort_keys, int axis) for (i = 0; i < n; i++) { PyObject *obj; obj = PySequence_GetItem(sort_keys, i); + if (obj == NULL) { + goto fail; + } mps[i] = (PyArrayObject *)PyArray_FROM_O(obj); Py_DECREF(obj); if (mps[i] == NULL) { diff --git a/numpy/core/tests/test_regression.py b/numpy/core/tests/test_regression.py index 23a71d2f1..e35bbb320 100644 --- a/numpy/core/tests/test_regression.py +++ b/numpy/core/tests/test_regression.py @@ -386,6 +386,17 @@ class TestRegression(TestCase): v = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) assert_equal(np.lexsort(v), 0) + def test_lexsort_invalid_sequence(self): + # Issue gh-4123 + class BuggySequence(object): + def __len__(self): + return 4 + def __getitem__(self, key): + raise KeyError + + assert_raises(KeyError, np.lexsort, BuggySequence()) + + def test_pickle_dtype(self,level=rlevel): """Ticket #251""" pickle.dumps(np.float) |