From 5b6e5762ca2f758330d2708c63e301720cf3dfae Mon Sep 17 00:00:00 2001 From: Kumar Aditya <59607654+kumaraditya303@users.noreply.github.com> Date: Thu, 23 Jun 2022 19:49:13 +0530 Subject: [PATCH] GH-91742: Fix pdb crash after jump (GH-94171) --- Lib/test/test_pdb.py | 43 +++++++++++++++++++ ...2-06-23-13-12-05.gh-issue-91742.sNytVX.rst | 1 + Objects/frameobject.c | 2 +- 3 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 Misc/NEWS.d/next/Library/2022-06-23-13-12-05.gh-issue-91742.sNytVX.rst diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py index 0141b739c25440..f0c15e7b9c5363 100644 --- a/Lib/test/test_pdb.py +++ b/Lib/test/test_pdb.py @@ -1363,7 +1363,50 @@ def test_pdb_issue_43318(): 4 """ +def test_pdb_issue_gh_91742(): + """See GH-91742 + >>> def test_function(): + ... __author__ = "pi" + ... __version__ = "3.14" + ... + ... def about(): + ... '''About''' + ... print(f"Author: {__author__!r}", + ... f"Version: {__version__!r}", + ... sep=" ") + ... + ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() + ... about() + + + >>> reset_Breakpoint() + >>> with PdbTestInput([ # doctest: +NORMALIZE_WHITESPACE + ... 'step', + ... 'next', + ... 'next', + ... 'jump 5', + ... 'continue' + ... ]): + ... test_function() + > (12)test_function() + -> about() + (Pdb) step + --Call-- + > (5)about() + -> def about(): + (Pdb) next + > (7)about() + -> print(f"Author: {__author__!r}", + (Pdb) next + > (8)about() + -> f"Version: {__version__!r}", + (Pdb) jump 5 + > (5)about() + -> def about(): + (Pdb) continue + Author: 'pi' Version: '3.14' + """ @support.requires_subprocess() class PdbTestCase(unittest.TestCase): def tearDown(self): diff --git a/Misc/NEWS.d/next/Library/2022-06-23-13-12-05.gh-issue-91742.sNytVX.rst b/Misc/NEWS.d/next/Library/2022-06-23-13-12-05.gh-issue-91742.sNytVX.rst new file mode 100644 index 00000000000000..30c92363b10b36 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2022-06-23-13-12-05.gh-issue-91742.sNytVX.rst @@ -0,0 +1 @@ +Fix :mod:`pdb` crash after jump caused by a null pointer dereference. Patch by Kumar Aditya. diff --git a/Objects/frameobject.c b/Objects/frameobject.c index 350b01125e4876..9ff0443e4558f4 100644 --- a/Objects/frameobject.c +++ b/Objects/frameobject.c @@ -418,7 +418,7 @@ static void frame_stack_pop(PyFrameObject *f) { PyObject *v = _PyFrame_StackPop(f->f_frame); - Py_DECREF(v); + Py_XDECREF(v); } static PyFrameState