mirror of
https://github.com/python/cpython.git
synced 2025-08-03 08:34:29 +00:00
GH-94262: Don't create frame objects for frames that aren't yet complete. (GH-94371)
This commit is contained in:
parent
1df9449db2
commit
544531de23
7 changed files with 87 additions and 13 deletions
|
@ -638,11 +638,10 @@ PyCode_New(int argcount, int kwonlyargcount,
|
|||
exceptiontable);
|
||||
}
|
||||
|
||||
static const char assert0[4] = {
|
||||
LOAD_ASSERTION_ERROR,
|
||||
0,
|
||||
RAISE_VARARGS,
|
||||
1
|
||||
static const char assert0[6] = {
|
||||
RESUME, 0,
|
||||
LOAD_ASSERTION_ERROR, 0,
|
||||
RAISE_VARARGS, 1
|
||||
};
|
||||
|
||||
PyCodeObject *
|
||||
|
@ -666,7 +665,7 @@ PyCode_NewEmpty(const char *filename, const char *funcname, int firstlineno)
|
|||
if (filename_ob == NULL) {
|
||||
goto failed;
|
||||
}
|
||||
code_ob = PyBytes_FromStringAndSize(assert0, 4);
|
||||
code_ob = PyBytes_FromStringAndSize(assert0, 6);
|
||||
if (code_ob == NULL) {
|
||||
goto failed;
|
||||
}
|
||||
|
|
|
@ -1169,8 +1169,14 @@ PyFrame_GetBack(PyFrameObject *frame)
|
|||
{
|
||||
assert(frame != NULL);
|
||||
PyFrameObject *back = frame->f_back;
|
||||
if (back == NULL && frame->f_frame->previous != NULL) {
|
||||
back = _PyFrame_GetFrameObject(frame->f_frame->previous);
|
||||
if (back == NULL) {
|
||||
_PyInterpreterFrame *prev = frame->f_frame->previous;
|
||||
while (prev && _PyFrame_IsIncomplete(prev)) {
|
||||
prev = prev->previous;
|
||||
}
|
||||
if (prev) {
|
||||
back = _PyFrame_GetFrameObject(prev);
|
||||
}
|
||||
}
|
||||
Py_XINCREF(back);
|
||||
return back;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue