mirror of
https://github.com/python/cpython.git
synced 2025-08-31 22:18:28 +00:00
bpo-38410: Properly handle PySys_Audit() failures (GH-16657)
This commit is contained in:
parent
62d21c9d90
commit
79ceccd1ec
4 changed files with 20 additions and 12 deletions
|
@ -11,9 +11,9 @@ PyAPI_DATA(int) _PyEval_SetProfile(PyThreadState *tstate, Py_tracefunc func, PyO
|
||||||
PyAPI_FUNC(void) PyEval_SetTrace(Py_tracefunc, PyObject *);
|
PyAPI_FUNC(void) PyEval_SetTrace(Py_tracefunc, PyObject *);
|
||||||
PyAPI_FUNC(int) _PyEval_SetTrace(PyThreadState *tstate, Py_tracefunc func, PyObject *arg);
|
PyAPI_FUNC(int) _PyEval_SetTrace(PyThreadState *tstate, Py_tracefunc func, PyObject *arg);
|
||||||
PyAPI_FUNC(int) _PyEval_GetCoroutineOriginTrackingDepth(void);
|
PyAPI_FUNC(int) _PyEval_GetCoroutineOriginTrackingDepth(void);
|
||||||
PyAPI_FUNC(void) _PyEval_SetAsyncGenFirstiter(PyObject *);
|
PyAPI_FUNC(int) _PyEval_SetAsyncGenFirstiter(PyObject *);
|
||||||
PyAPI_FUNC(PyObject *) _PyEval_GetAsyncGenFirstiter(void);
|
PyAPI_FUNC(PyObject *) _PyEval_GetAsyncGenFirstiter(void);
|
||||||
PyAPI_FUNC(void) _PyEval_SetAsyncGenFinalizer(PyObject *);
|
PyAPI_FUNC(int) _PyEval_SetAsyncGenFinalizer(PyObject *);
|
||||||
PyAPI_FUNC(PyObject *) _PyEval_GetAsyncGenFinalizer(void);
|
PyAPI_FUNC(PyObject *) _PyEval_GetAsyncGenFinalizer(void);
|
||||||
|
|
||||||
/* Helper to look up a builtin object */
|
/* Helper to look up a builtin object */
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Properly handle :func:`sys.audit` failures in
|
||||||
|
:func:`sys.set_asyncgen_hooks`.
|
|
@ -4785,17 +4785,18 @@ _PyEval_GetCoroutineOriginTrackingDepth(void)
|
||||||
return tstate->coroutine_origin_tracking_depth;
|
return tstate->coroutine_origin_tracking_depth;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
int
|
||||||
_PyEval_SetAsyncGenFirstiter(PyObject *firstiter)
|
_PyEval_SetAsyncGenFirstiter(PyObject *firstiter)
|
||||||
{
|
{
|
||||||
PyThreadState *tstate = _PyThreadState_GET();
|
PyThreadState *tstate = _PyThreadState_GET();
|
||||||
|
|
||||||
if (PySys_Audit("sys.set_asyncgen_hook_firstiter", NULL) < 0) {
|
if (PySys_Audit("sys.set_asyncgen_hook_firstiter", NULL) < 0) {
|
||||||
return;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
Py_XINCREF(firstiter);
|
Py_XINCREF(firstiter);
|
||||||
Py_XSETREF(tstate->async_gen_firstiter, firstiter);
|
Py_XSETREF(tstate->async_gen_firstiter, firstiter);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
|
@ -4805,17 +4806,18 @@ _PyEval_GetAsyncGenFirstiter(void)
|
||||||
return tstate->async_gen_firstiter;
|
return tstate->async_gen_firstiter;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
int
|
||||||
_PyEval_SetAsyncGenFinalizer(PyObject *finalizer)
|
_PyEval_SetAsyncGenFinalizer(PyObject *finalizer)
|
||||||
{
|
{
|
||||||
PyThreadState *tstate = _PyThreadState_GET();
|
PyThreadState *tstate = _PyThreadState_GET();
|
||||||
|
|
||||||
if (PySys_Audit("sys.set_asyncgen_hook_finalizer", NULL) < 0) {
|
if (PySys_Audit("sys.set_asyncgen_hook_finalizer", NULL) < 0) {
|
||||||
return;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
Py_XINCREF(finalizer);
|
Py_XINCREF(finalizer);
|
||||||
Py_XSETREF(tstate->async_gen_finalizer, finalizer);
|
Py_XSETREF(tstate->async_gen_finalizer, finalizer);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
|
|
|
@ -1222,10 +1222,12 @@ sys_set_asyncgen_hooks(PyObject *self, PyObject *args, PyObject *kw)
|
||||||
Py_TYPE(finalizer)->tp_name);
|
Py_TYPE(finalizer)->tp_name);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
_PyEval_SetAsyncGenFinalizer(finalizer);
|
if (_PyEval_SetAsyncGenFinalizer(finalizer) < 0) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (finalizer == Py_None) {
|
else if (finalizer == Py_None && _PyEval_SetAsyncGenFinalizer(NULL) < 0) {
|
||||||
_PyEval_SetAsyncGenFinalizer(NULL);
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (firstiter && firstiter != Py_None) {
|
if (firstiter && firstiter != Py_None) {
|
||||||
|
@ -1235,10 +1237,12 @@ sys_set_asyncgen_hooks(PyObject *self, PyObject *args, PyObject *kw)
|
||||||
Py_TYPE(firstiter)->tp_name);
|
Py_TYPE(firstiter)->tp_name);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
_PyEval_SetAsyncGenFirstiter(firstiter);
|
if (_PyEval_SetAsyncGenFirstiter(firstiter) < 0) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (firstiter == Py_None) {
|
else if (firstiter == Py_None && _PyEval_SetAsyncGenFirstiter(NULL) < 0) {
|
||||||
_PyEval_SetAsyncGenFirstiter(NULL);
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue