diff options
author | Simon Gibbons <simongibbons@gmail.com> | 2018-02-18 16:19:38 +0000 |
---|---|---|
committer | Simon Gibbons <simongibbons@gmail.com> | 2018-02-18 16:19:38 +0000 |
commit | 79697ad84fa73b49cca2b6380a74a0bfce4b32bc (patch) | |
tree | f49e94250f8d3de2309d4f24d437558905b20978 | |
parent | 4105af42c38539e8bf854c49134fe221d86ec79d (diff) | |
download | numpy-79697ad84fa73b49cca2b6380a74a0bfce4b32bc.tar.gz |
BUG: Correctly identify comma seperated dtype strings
When parsing dtype strings, we should only consider them to
be comma seperated if there are commas not present in a
pair of square brackets.
Whilst we had a check for this already in the code there was
an off by 1 bug where we failed to consider the first character
of the string. This would lead to an infinite recursion when
trying to parse strings of the form `[i8,f8]`.
Fixes: #10440
-rw-r--r-- | numpy/core/src/multiarray/descriptor.c | 2 | ||||
-rw-r--r-- | numpy/core/tests/test_dtype.py | 5 |
2 files changed, 6 insertions, 1 deletions
diff --git a/numpy/core/src/multiarray/descriptor.c b/numpy/core/src/multiarray/descriptor.c index 897155238..b4a0ce37d 100644 --- a/numpy/core/src/multiarray/descriptor.c +++ b/numpy/core/src/multiarray/descriptor.c @@ -198,7 +198,7 @@ _check_for_commastring(char *type, Py_ssize_t len) * allows commas inside of [], for parameterized dtypes to use. */ sqbracket = 0; - for (i = 1; i < len; i++) { + for (i = 0; i < len; i++) { switch (type[i]) { case ',': if (sqbracket == 0) { diff --git a/numpy/core/tests/test_dtype.py b/numpy/core/tests/test_dtype.py index 110ae378b..2f997b4f7 100644 --- a/numpy/core/tests/test_dtype.py +++ b/numpy/core/tests/test_dtype.py @@ -719,5 +719,10 @@ def test_dtypes_are_true(): assert bool(np.dtype([('a', 'i8'), ('b', 'f4')])) +def test_invalid_dtype_string(): + # test for gh-10440 + assert_raises(TypeError, np.dtype, 'f8,i8,[f8,i8]') + + if __name__ == "__main__": run_module_suite() |