8000 bpo-38410: Properly handle PySys_Audit() failures (GH-16657) · python/cpython@79ceccd · GitHub
[go: up one dir, main page]

Skip to content

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 79ceccd

Browse files
authored
bpo-38410: Properly handle PySys_Audit() failures (GH-16657)
1 parent 62d21c9 commit 79ceccd

File tree

4 files changed

+20
-12
lines changed

4 files changed

+20
-12
lines changed

Include/cpython/ceval.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ PyAPI_DATA(int) _PyEval_SetProfile(PyThreadState *tstate, Py_tracefunc func, PyO
1111
PyAPI_FUNC(void) PyEval_SetTrace(Py_tracefunc, PyObject *);
1212
PyAPI_FUNC(int) _PyEval_SetTrace(PyThreadState *tstate, Py_tracefunc func, PyObject *arg);
1313
PyAPI_FUNC(int) _PyEval_GetCoroutineOriginTrackingDepth(void);
14-
PyAPI_FUNC(void) _PyEval_SetAsyncGenFirstiter(PyObject *);
14+
PyAPI_FUNC(int) _PyEval_SetAsyncGenFirstiter(PyObject *);
1515
PyAPI_FUNC(PyObject *) _PyEval_GetAsyncGenFirstiter(void);
16-
PyAPI_FUNC(void) _PyEval_SetAsyncGenFinalizer(PyObject *);
16+
PyAPI_FUNC(int) _PyEval_SetAsyncGenFinalizer(PyObject *);
1717
PyAPI_FUNC(PyObject *) _PyEval_GetAsyncGenFinalizer(void);
1818

1919
/* Helper to look up a builtin object */
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Properly handle :func:`sys.audit` failures in
2+
:func:`sys.set_asyncgen_hooks`.

Python/ceval.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4785,17 +4785,18 @@ _PyEval_GetCoroutineOriginTrackingDepth(void)
47854785
return tstate->coroutine_origin_tracking_depth;
47864786
}
47874787

4788-
void
4788+
int
47894789
_PyEval_SetAsyncGenFirstiter(PyObject *firstiter)
47904790
{
47914791
PyThreadState *tstate = _PyThreadState_GET();
47924792

47934793
if (PySys_Audit("sys.set_asyncgen_hook_firstiter", NULL) < 0) {
4794-
return;
4794+
return -1;
47954795
}
47964796

47974797
Py_XINCREF(firstiter);
47984798
Py_XSETREF(tstate->async_gen_firstiter, firstiter);
4799+
return 0;
47994800
}
48004801

48014802
PyObject *
@@ -4805,17 +4806,18 @@ _PyEval_GetAsyncGenFirstiter(void)
48054806
return tstate->async_gen_firstiter;
48064807
}
48074808

4808-
void
4809+
int
48094810
_PyEval_SetAsyncGenFinalizer(PyObject *finalizer)
48104811
{
48114812
PyThreadState *tstate = _PyThreadState_GET();
48124813

48134814
if (PySys_Audit("sys.set_asyncgen_hook_finalizer", NULL) < 0) {
4814-
return;
4815+
return -1;
48154816
}
48164817

48174818
Py_XINCREF(finalizer);
48184819
Py_XSETREF(tstate->async_gen_finalizer, finalizer);
4820+
return 0;
48194821
}
48204822

48214823
PyObject *

Python/sysmodule.c

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1222,10 +1222,12 @@ sys_set_asyncgen_hooks(PyObject *self, PyObject *args, PyObject *kw)
12221222
Py_TYPE(finalizer)->tp_name);
12231223
return NULL;
12241224
}
1225-
_PyEval_SetAsyncGenFinalizer(finalizer);
1225+
if (_PyEval_SetAsyncGenFinalizer(finalizer) < 0) {
1226+
return NULL;
1227+
}
12261228
}
1227-
else if (finalizer == Py_None) {
1228-
_PyEval_SetAsyncGenFinalizer(NULL);
1229+
else if (finalizer == Py_None && _PyEval_SetAsyncGenFinalizer(NULL) < 0) {
1230+
return NULL;
12291231
}
12301232

12311233
if (firstiter && firstiter != Py_None) {
@@ -1235,10 +1237,12 @@ sys_set_asyncgen_hooks(PyObject *self, PyObject *args, PyObject *kw)
12351237
Py_TYPE(firstiter)->tp_name);
12361238
return NULL;
12371239
}
1238-
_PyEval_SetAsyncGenFirstiter(firstiter);
1240+
if (_PyEval_SetAsyncGenFirstiter(firstiter) < 0) {
1241+
return NULL;
1242+
}
12391243
}
1240-
else if (firstiter == Py_None) {
1241-
_PyEval_SetAsyncGenFirstiter(NULL);
1244+
else if (firstiter == Py_None && _PyEval_SetAsyncGenFirstiter(NULL) < 0) {
1245+
return NULL;
12421246
}
12431247

12441248
Py_RETURN_NONE;

0 commit comments

Comments
 (0)
0