diff options
author | Nikita Sobolev <mail@sobolevn.me> | 2024-02-04 19:16:43 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-04 19:16:43 (GMT) |
commit | 929d44e15a5667151beadb2d3a2528cd641639d6 (patch) | |
tree | 31c14abe2cafaf3ac27a22f7298f456668fed6ee /Objects | |
parent | da8f9fb2ea65cc2784c2400fc39ad8c800a67a42 (diff) | |
download | cpython-929d44e15a5667151beadb2d3a2528cd641639d6.zip cpython-929d44e15a5667151beadb2d3a2528cd641639d6.tar.gz cpython-929d44e15a5667151beadb2d3a2528cd641639d6.tar.bz2 |
gh-114685: PyBuffer_FillInfo() now raises on PyBUF_{READ,WRITE} (GH-114802)
Diffstat (limited to 'Objects')
-rw-r--r-- | Objects/abstract.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/Objects/abstract.c b/Objects/abstract.c index daf04eb..07d4b89 100644 --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -767,11 +767,17 @@ PyBuffer_FillInfo(Py_buffer *view, PyObject *obj, void *buf, Py_ssize_t len, return -1; } - if (((flags & PyBUF_WRITABLE) == PyBUF_WRITABLE) && - (readonly == 1)) { - PyErr_SetString(PyExc_BufferError, - "Object is not writable."); - return -1; + if (flags != PyBUF_SIMPLE) { /* fast path */ + if (flags == PyBUF_READ || flags == PyBUF_WRITE) { + PyErr_BadInternalCall(); + return -1; + } + if (((flags & PyBUF_WRITABLE) == PyBUF_WRITABLE) && + (readonly == 1)) { + PyErr_SetString(PyExc_BufferError, + "Object is not writable."); + return -1; + } } view->obj = Py_XNewRef(obj); |