aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Python/initconfig.c
diff options
context:
space:
mode:
authorAmmar Askar <ammar@ammaraskar.com>2025-02-12 20:43:09 -0500
committerGitHub <noreply@github.com>2025-02-13 01:43:09 +0000
commitf9a7d41bacb78b9d6e095be049befdec19ffda0a (patch)
treeba14fa66f7e6bb0806dcec4ed95ff9bb7aa8fe1d /Python/initconfig.c
parent6fb5138776fe84e3769b8aff66c1726c788d84ed (diff)
downloadcpython-f9a7d41bacb78b9d6e095be049befdec19ffda0a.tar.gz
cpython-f9a7d41bacb78b9d6e095be049befdec19ffda0a.zip
gh-96092: Fix traceback.walk_stack(None) skipping too many frames (#129330)
As it says in its documentation, walk_stack was meant to just follow `f.f_back` like other functions in the traceback module. Instead it was previously doing `f.f_back.f_back` and then this changed to `f_back.f_back.f_back.f_back' in Python 3.11 breaking its behavior for external users. This happened because the walk_stack function never really had any good direct tests and its only consumer in the traceback module was `extract_stack` which passed the result into `StackSummary.extract`. As a generator, it was previously capturing the state of the stack when it was first iterated over, rather than the stack when `walk_stack` was called. Meaning when called inside the two method deep `extract` and `extract_stack` calls, two `f_back`s were needed. When 3.11 modified the sequence of calls in `extract`, two more `f_back`s were needed to make the tests happy. This changes the generator to capture the stack when `walk_stack` is called, rather than when it is first iterated over. Since this is technically a breaking change in behavior, there is a versionchanged to the documentation. In practice, this is unlikely to break anyone, you would have been needing to store the result of `walk_stack` and expecting it to change.
Diffstat (limited to 'Python/initconfig.c')
0 files changed, 0 insertions, 0 deletions