mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
Close #16742: Fix misuse of memory allocations in PyOS_Readline()
The GIL must be held to call PyMem_Malloc(), whereas PyOS_Readline() releases the GIL to read input. The result of the C callback PyOS_ReadlineFunctionPointer must now be a string allocated by PyMem_RawMalloc() or PyMem_RawRealloc() (or NULL if an error occurred), instead of a string allocated by PyMem_Malloc() or PyMem_Realloc(). Fixing this issue was required to setup a hook on PyMem_Malloc(), for example using the tracemalloc module. PyOS_Readline() copies the result of PyOS_ReadlineFunctionPointer() into a new buffer allocated by PyMem_Malloc(). So the public API of PyOS_Readline() does not change.
This commit is contained in:
parent
6cf185dc06
commit
2fe9bac4dc
5 changed files with 41 additions and 8 deletions
|
@ -166,6 +166,14 @@ the same library that the Python runtime is using.
|
|||
resulting string. For example, The :mod:`readline` module sets
|
||||
this hook to provide line-editing and tab-completion features.
|
||||
|
||||
The result must be a string allocated by :c:func:`PyMem_RawMalloc` or
|
||||
:c:func:`PyMem_RawRealloc`, or *NULL* if an error occurred.
|
||||
|
||||
.. versionchanged:: 3.4
|
||||
The result must be allocated by :c:func:`PyMem_RawMalloc` or
|
||||
:c:func:`PyMem_RawRealloc`, instead of being allocated by
|
||||
:c:func:`PyMem_Malloc` or :c:func:`PyMem_Realloc`.
|
||||
|
||||
|
||||
.. c:function:: struct _node* PyParser_SimpleParseString(const char *str, int start)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue