bpo-39008: Require Py_ssize_t for PySys_Audit formats rather than raise a deprecation warning (GH-17540)

This commit is contained in:
Steve Dower 2019-12-09 11:05:39 -08:00 committed by GitHub
parent ac229116a3
commit b8cbe74c34
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 12 additions and 1 deletions

View file

@ -320,10 +320,18 @@ accessible to C code. They all work with the current interpreter thread's
arguments to this function will be consumed, using it may cause reference arguments to this function will be consumed, using it may cause reference
leaks.) leaks.)
Note that ``#`` format characters should always be treated as
``Py_ssize_t``, regardless of whether ``PY_SSIZE_T_CLEAN`` was defined.
:func:`sys.audit` performs the same function from Python code. :func:`sys.audit` performs the same function from Python code.
.. versionadded:: 3.8 .. versionadded:: 3.8
.. versionchanged:: 3.8.2
Require ``Py_ssize_t`` for ``#`` format characters. Previously, an
unavoidable deprecation warning was raised.
.. c:function:: int PySys_AddAuditHook(Py_AuditHookFunction hook, void *userData) .. c:function:: int PySys_AddAuditHook(Py_AuditHookFunction hook, void *userData)

View file

@ -0,0 +1,3 @@
:c:func:`PySys_Audit` now requires ``Py_ssize_t`` to be used for size
arguments in the format string, regardless of whethen ``PY_SSIZE_T_CLEAN``
was defined at include time.

View file

@ -181,7 +181,7 @@ PySys_Audit(const char *event, const char *argFormat, ...)
if (argFormat && argFormat[0]) { if (argFormat && argFormat[0]) {
va_list args; va_list args;
va_start(args, argFormat); va_start(args, argFormat);
eventArgs = Py_VaBuildValue(argFormat, args); eventArgs = _Py_VaBuildValue_SizeT(argFormat, args);
va_end(args); va_end(args);
if (eventArgs && !PyTuple_Check(eventArgs)) { if (eventArgs && !PyTuple_Check(eventArgs)) {
PyObject *argTuple = PyTuple_Pack(1, eventArgs); PyObject *argTuple = PyTuple_Pack(1, eventArgs);