summaryrefslogtreecommitdiffstats
path: root/Objects
diff options
context:
space:
mode:
authorNikita Sobolev <mail@sobolevn.me>2024-02-04 19:16:43 (GMT)
committerGitHub <noreply@github.com>2024-02-04 19:16:43 (GMT)
commit929d44e15a5667151beadb2d3a2528cd641639d6 (patch)
tree31c14abe2cafaf3ac27a22f7298f456668fed6ee /Objects
parentda8f9fb2ea65cc2784c2400fc39ad8c800a67a42 (diff)
downloadcpython-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.c16
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);