| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 7a93db4 commit b7688ef
4 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -4585,6 +4585,12 @@ def test_c_buffer(self): | |||
| 4585 | 4585 | buf.__release_buffer__(mv) | |
| 4586 | 4586 | self.assertEqual(buf.references, 0) | |
| 4587 | 4587 | ||
| 4588 | + @unittest.skipIf(_testcapi is None, "requires _testcapi") | ||
| 4589 | + def test_c_buffer_invalid_flags(self): | ||
| 4590 | + buf = _testcapi.testBuf() | ||
| 4591 | + self.assertRaises(SystemError, buf.__buffer__, PyBUF_READ) | ||
| 4592 | + self.assertRaises(SystemError, buf.__buffer__, PyBUF_WRITE) | ||
| 4593 | + | ||
| 4588 | 4594 | def test_inheritance(self): | |
| 4589 | 4595 | class A(bytearray): | |
| 4590 | 4596 | def __buffer__(self, flags): | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,3 @@ | |||
| 1 | + :c:func:`PyObject_GetBuffer` now raises a :exc:`SystemError` if called with | ||
| 2 | + :c:macro:`PyBUF_READ` or :c:macro:`PyBUF_WRITE` as flags. These flags should | ||
| 3 | + only be used with the ``PyMemoryView_*`` C API. | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -54,8 +54,10 @@ static int | |||
| 54 | 54 | testbuf_getbuf(testBufObject *self, Py_buffer *view, int flags) | |
| 55 | 55 | { | |
| 56 | 56 | int buf = PyObject_GetBuffer(self->obj, view, flags); | |
| 57 | - Py_SETREF(view->obj, Py_NewRef(self)); | ||
| 58 | - self->references++; | ||
| 57 | + if (buf == 0) { | ||
| 58 | + Py_SETREF(view->obj, Py_NewRef(self)); | ||
| 59 | + self->references++; | ||
| 60 | + } | ||
| 59 | 61 | return buf; | |
| 60 | 62 | } | |
| 61 | 63 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -425,6 +425,12 @@ PyObject_AsWriteBuffer(PyObject *obj, | |||
| 425 | 425 | int | |
| 426 | 426 | PyObject_GetBuffer(PyObject *obj, Py_buffer *view, int flags) | |
| 427 | 427 | { | |
| 428 | + if (flags != PyBUF_SIMPLE) { /* fast path */ | ||
| 429 | + if (flags == PyBUF_READ || flags == PyBUF_WRITE) { | ||
| 430 | + PyErr_BadInternalCall(); | ||
| 431 | + return -1; | ||
| 432 | + } | ||
| 433 | + } | ||
| 428 | 434 | PyBufferProcs *pb = Py_TYPE(obj)->tp_as_buffer; | |
| 429 | 435 | ||
| 430 | 436 | if (pb == NULL || pb->bf_getbuffer == NULL) { | |
| Back | FazBrowse Home | New Git URL |
0 commit comments