Merged revisions 88550 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r88550 | antoine.pitrou | 2011-02-24 21:50:49 +0100 (jeu., 24 févr. 2011) | 4 lines Issue #11286: Raise a ValueError from calling PyMemoryView_FromBuffer with a buffer struct having a NULL data pointer. ........
This commit is contained in:
parent
ec8f0df229
commit
915605c59a
|
@ -50,6 +50,8 @@ class CAPITest(unittest.TestCase):
|
||||||
b'Fatal Python error:'
|
b'Fatal Python error:'
|
||||||
b' PyThreadState_Get: no current thread')
|
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.')
|
@unittest.skipUnless(threading, 'Threading required for this test.')
|
||||||
class TestPendingCalls(unittest.TestCase):
|
class TestPendingCalls(unittest.TestCase):
|
||||||
|
|
|
@ -10,6 +10,9 @@ What's New in Python 3.2.1?
|
||||||
Core and Builtins
|
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
|
- Issue #11272: On Windows, input() strips '\r' (and not only '\n'), and
|
||||||
sys.stdin uses universal newline (replace '\r\n' by '\n').
|
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);
|
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
|
/* Test that the fatal error from not having a current thread doesn't
|
||||||
cause an infinite loop. Run via Lib/test/test_capi.py */
|
cause an infinite loop. Run via Lib/test/test_capi.py */
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
@ -2326,6 +2335,8 @@ static PyMethodDef TestMethods[] = {
|
||||||
{"code_newempty", code_newempty, METH_VARARGS},
|
{"code_newempty", code_newempty, METH_VARARGS},
|
||||||
{"make_exception_with_doc", (PyCFunction)make_exception_with_doc,
|
{"make_exception_with_doc", (PyCFunction)make_exception_with_doc,
|
||||||
METH_VARARGS | METH_KEYWORDS},
|
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},
|
{"crash_no_current_thread", (PyCFunction)crash_no_current_thread, METH_NOARGS},
|
||||||
{NULL, NULL} /* sentinel */
|
{NULL, NULL} /* sentinel */
|
||||||
};
|
};
|
||||||
|
|
|
@ -75,6 +75,11 @@ PyMemoryView_FromBuffer(Py_buffer *info)
|
||||||
{
|
{
|
||||||
PyMemoryViewObject *mview;
|
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 *)
|
mview = (PyMemoryViewObject *)
|
||||||
PyObject_GC_New(PyMemoryViewObject, &PyMemoryView_Type);
|
PyObject_GC_New(PyMemoryViewObject, &PyMemoryView_Type);
|
||||||
if (mview == NULL)
|
if (mview == NULL)
|
||||||
|
|
Loading…
Reference in New Issue