cpython: e8fe32d43c96 (original) (raw)
Mercurial > cpython
changeset 94490:e8fe32d43c96
Issue #14203: Remove obsolete support for view==NULL in PyBuffer_FillInfo() and bytearray_getbuffer(). Both functions now raise BufferError in that case. [#14203]
Stefan Krah skrah@bytereef.org | |
---|---|
date | Tue, 03 Feb 2015 16:57:21 +0100 |
parents | 7494f3972726 |
children | 17cda5a92b6a |
files | Misc/NEWS Modules/_testcapimodule.c Objects/abstract.c Objects/bytearrayobject.c |
diffstat | 4 files changed, 51 insertions(+), 9 deletions(-)[+] [-] Misc/NEWS 4 Modules/_testcapimodule.c 34 Objects/abstract.c 7 Objects/bytearrayobject.c 15 |
line wrap: on
line diff
--- a/Misc/NEWS +++ b/Misc/NEWS @@ -1560,6 +1560,10 @@ Build C API ----- +- Issue #14203: Remove obsolete support for view==NULL in PyBuffer_FillInfo()
- Issue #22445: PyBuffer_IsContiguous() now implements precise contiguity tests, compatible with NumPy's NPY_RELAXED_STRIDES_CHECKING compilation flag. Previously the function reported false negatives for corner cases.
--- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -2518,6 +2518,39 @@ test_from_contiguous(PyObject* self, PyO Py_RETURN_NONE; }
- +static PyObject +test_pep3118_obsolete_write_locks(PyObject self, PyObject *noargs) +{
- PyObject *b;
- char *dummy[1];
- int ret, match;
- ret = PyBuffer_FillInfo(NULL, NULL, dummy, 1, 0, PyBUF_SIMPLE);
- match = PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_BufferError);
- PyErr_Clear();
- if (ret != -1 || match == 0)
goto error;[](#l2.19)
- ret = PyObject_GetBuffer(b, NULL, PyBUF_SIMPLE);
- Py_DECREF(b);
- match = PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_BufferError);
- PyErr_Clear();
- if (ret != -1 || match == 0)
goto error;[](#l2.31)
+} /* Test that the fatal error from not having a current thread doesn't cause an infinite loop. Run via Lib/test/test_capi.py */ @@ -3179,6 +3212,7 @@ static PyMethodDef TestMethods[] = { {"test_unicode_compare_with_ascii", (PyCFunction)test_unicode_compare_with_ascii, METH_NOARGS}, {"test_capsule", (PyCFunction)test_capsule, METH_NOARGS}, {"test_from_contiguous", (PyCFunction)test_from_contiguous, METH_NOARGS},
- {"test_pep3118_obsolete_write_locks", (PyCFunction)test_pep3118_obsolete_write_locks, METH_NOARGS}, {"getargs_tuple", getargs_tuple, METH_VARARGS}, {"getargs_keywords", (PyCFunction)getargs_keywords, METH_VARARGS|METH_KEYWORDS},
--- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -612,7 +612,12 @@ int PyBuffer_FillInfo(Py_buffer *view, PyObject *obj, void *buf, Py_ssize_t len, int readonly, int flags) {
- if (view == NULL) {
PyErr_SetString(PyExc_BufferError,[](#l3.9)
"PyBuffer_FillInfo: view==NULL argument is obsolete");[](#l3.10)
return -1;[](#l3.11)
- }
+ if (((flags & PyBUF_WRITABLE) == PyBUF_WRITABLE) && (readonly == 1)) { PyErr_SetString(PyExc_BufferError,
--- a/Objects/bytearrayobject.c +++ b/Objects/bytearrayobject.c @@ -60,18 +60,17 @@ static int static int bytearray_getbuffer(PyByteArrayObject *obj, Py_buffer *view, int flags) {
PyErr_SetString(PyExc_BufferError,[](#l4.12)
"bytearray_getbuffer: view==NULL argument is obsolete");[](#l4.13)
} ptr = (void *) PyByteArray_AS_STRING(obj);return -1;[](#l4.14)
- ret = PyBuffer_FillInfo(view, (PyObject*)obj, ptr, Py_SIZE(obj), 0, flags);
- if (ret >= 0) {
obj->ob_exports++;[](#l4.19)
- }
- return ret;