Issue #11286: Raise a ValueError from calling PyMemoryView_FromBuffer with
a buffer struct having a NULL data pointer.
This commit is contained in:
parent
1ce92dc20d
commit
5bffa79c22
|
@ -50,6 +50,8 @@ class CAPITest(unittest.TestCase):
|
|||
b'Fatal Python error:'
|
||||
b' PyThreadState_Get: no current thread')
|
||||
|
||||
def test_memoryview_from_NULL_pointer(self):
|
||||
self.assertRaises(ValueError, _testcapi.make_memoryview_from_NULL_pointer)
|
||||
|
||||
@unittest.skipUnless(threading, 'Threading required for this test.')
|
||||
class TestPendingCalls(unittest.TestCase):
|
||||
|
|
|
@ -10,6 +10,9 @@ What's New in Python 3.3 Alpha 1?
|
|||
Core and Builtins
|
||||
-----------------
|
||||
|
||||
- Issue #11286: Raise a ValueError from calling PyMemoryView_FromBuffer with
|
||||
a buffer struct having a NULL data pointer.
|
||||
|
||||
- Issue #11272: On Windows, input() strips '\r' (and not only '\n'), and
|
||||
sys.stdin uses universal newline (replace '\r\n' by '\n').
|
||||
|
||||
|
|
|
@ -2231,6 +2231,15 @@ make_exception_with_doc(PyObject *self, PyObject *args, PyObject *kwargs)
|
|||
return PyErr_NewExceptionWithDoc(name, doc, base, dict);
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
make_memoryview_from_NULL_pointer(PyObject *self)
|
||||
{
|
||||
Py_buffer info;
|
||||
if (PyBuffer_FillInfo(&info, NULL, NULL, 1, 1, PyBUF_FULL_RO) < 0)
|
||||
return NULL;
|
||||
return PyMemoryView_FromBuffer(&info);
|
||||
}
|
||||
|
||||
/* Test that the fatal error from not having a current thread doesn't
|
||||
cause an infinite loop. Run via Lib/test/test_capi.py */
|
||||
static PyObject *
|
||||
|
@ -2326,6 +2335,8 @@ static PyMethodDef TestMethods[] = {
|
|||
{"code_newempty", code_newempty, METH_VARARGS},
|
||||
{"make_exception_with_doc", (PyCFunction)make_exception_with_doc,
|
||||
METH_VARARGS | METH_KEYWORDS},
|
||||
{"make_memoryview_from_NULL_pointer", (PyCFunction)make_memoryview_from_NULL_pointer,
|
||||
METH_NOARGS},
|
||||
{"crash_no_current_thread", (PyCFunction)crash_no_current_thread, METH_NOARGS},
|
||||
{NULL, NULL} /* sentinel */
|
||||
};
|
||||
|
|
|
@ -75,6 +75,11 @@ PyMemoryView_FromBuffer(Py_buffer *info)
|
|||
{
|
||||
PyMemoryViewObject *mview;
|
||||
|
||||
if (info->buf == NULL) {
|
||||
PyErr_SetString(PyExc_ValueError,
|
||||
"cannot make memory view from a buffer with a NULL data pointer");
|
||||
return NULL;
|
||||
}
|
||||
mview = (PyMemoryViewObject *)
|
||||
PyObject_GC_New(PyMemoryViewObject, &PyMemoryView_Type);
|
||||
if (mview == NULL)
|
||||
|
|
Loading…
Reference in New Issue