Commit 66e63170 authored by Stefan Krah's avatar Stefan Krah

Issue #15770: Check invalid arguments in test function. Patch by Victor Stinner.

parent f21587e3
...@@ -1212,6 +1212,8 @@ class TestBufferProtocol(unittest.TestCase): ...@@ -1212,6 +1212,8 @@ class TestBufferProtocol(unittest.TestCase):
self.assertRaises(TypeError, get_contiguous, nd, PyBUF_READ, 961) self.assertRaises(TypeError, get_contiguous, nd, PyBUF_READ, 961)
self.assertRaises(UnicodeEncodeError, get_contiguous, nd, PyBUF_READ, self.assertRaises(UnicodeEncodeError, get_contiguous, nd, PyBUF_READ,
'\u2007') '\u2007')
self.assertRaises(ValueError, get_contiguous, nd, PyBUF_READ, 'Z')
self.assertRaises(ValueError, get_contiguous, nd, 255, 'A')
# cmp_contig() # cmp_contig()
nd = ndarray([1], shape=[1]) nd = ndarray([1], shape=[1])
......
...@@ -2362,6 +2362,13 @@ get_ascii_order(PyObject *order) ...@@ -2362,6 +2362,13 @@ get_ascii_order(PyObject *order)
ord = PyBytes_AS_STRING(ascii_order)[0]; ord = PyBytes_AS_STRING(ascii_order)[0];
Py_DECREF(ascii_order); Py_DECREF(ascii_order);
if (ord != 'C' && ord != 'F' && ord != 'A') {
PyErr_SetString(PyExc_ValueError,
"invalid order, must be C, F or A");
return CHAR_MAX;
}
return ord; return ord;
} }
...@@ -2384,15 +2391,20 @@ get_contiguous(PyObject *self, PyObject *args) ...@@ -2384,15 +2391,20 @@ get_contiguous(PyObject *self, PyObject *args)
"buffertype must be PyBUF_READ or PyBUF_WRITE"); "buffertype must be PyBUF_READ or PyBUF_WRITE");
return NULL; return NULL;
} }
type = PyLong_AsLong(buffertype); type = PyLong_AsLong(buffertype);
if (type == -1 && PyErr_Occurred()) { if (type == -1 && PyErr_Occurred()) {
return NULL; return NULL;
} }
if (type != PyBUF_READ && type != PyBUF_WRITE) {
PyErr_SetString(PyExc_ValueError,
"invalid buffer type");
return NULL;
}
ord = get_ascii_order(order); ord = get_ascii_order(order);
if (ord == CHAR_MAX) { if (ord == CHAR_MAX)
return NULL; return NULL;
}
return PyMemoryView_GetContiguous(obj, (int)type, ord); return PyMemoryView_GetContiguous(obj, (int)type, ord);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment