diff options
author | Sebastian Berg <sebastian@sipsolutions.net> | 2013-12-14 20:21:11 +0100 |
---|---|---|
committer | Sebastian Berg <sebastian@sipsolutions.net> | 2013-12-14 20:21:11 +0100 |
commit | 684b159e583ad1c8c658cf128661169bfdfc10c3 (patch) | |
tree | 9811f828b310c893ecd25e2f6e4841b6327f9171 | |
parent | 205598b0a4ff9cf81904d3871a7fd37931d914a2 (diff) | |
download | numpy-684b159e583ad1c8c658cf128661169bfdfc10c3.tar.gz |
BUG: Fix missing NULL check in lexsort
When Getitem of the lexsort sequence argument failed
this was not checked.
Closes gh-4123
-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) |