[issue9602] PyObject_AsCharBuffer() should only accept read-only objects

Antoine Pitrou report at bugs.python.org
Tue Sep 28 22:24:56 CEST 2010


Antoine Pitrou <pitrou at free.fr> added the comment:

> Yes, I was unclear. This refers to Python 3.2, not the 2.x series.
> PyObject_AsReadBuffer (defined at line 270 in abstract.c, code of
> routine attached) calls bf_getbuffer with the PyBUF_SIMPLE flag to
> retrieve a bytes buffer. It then calls bf_releasebuffer before
> returning the buffer to the caller. PyObject_AsCharBuffer and
> PyObject_AsWriteBuffer do the same. It is not be exactly the same
> issue discussed so far, but is closely related.
> 
> Deprecating PyObject_AsReadBuffer is extreme,

I disagree. PyObject_As*Buffer functions are remnants of the old buffer
API in Python 2.x. They are here only to ease porting of existing C
code, but carefully written 3.x code should switch to
PyObject_GetBuffer() (or one of the dedicated typecodes in
PyArg_ParseTuple: "y*", "w*", etc.).

> Redefining the PyBUF_SIMPLE flag to be like the old buffer protocol
> warns those implementing a new buffer interface to  avoid processing
> PyBUF_SIMPLE requests when locking is required.

Well, the new buffer API was designed precisely because the old API
wasn't appropriate, so your proposal to revive the old API doesn't sound
very compelling, to say the least.

To restate things a bit more clearly: you should use
PyObject_GetBuffer(), not any of the PyObject_As*Buffer functions.
Perhaps you should explain why you care about the latter rather than the
former.

----------

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue9602>
_______________________________________


More information about the Python-bugs-list mailing list