aboutsummaryrefslogtreecommitdiff
path: root/gdb/python
diff options
context:
space:
mode:
authorPierre-Marie de Rodat <derodat@adacore.com>2016-06-27 12:11:25 +0200
committerPierre-Marie de Rodat <derodat@adacore.com>2016-06-27 12:11:25 +0200
commitf4952523968703caa027a5922263eb97b88bedc3 (patch)
tree089ad47429f388e7f85cc1777cca8fe21e91415f /gdb/python
parent3cd72572cbbf3bb720a41af1db26e81898c318c2 (diff)
downloadgdb-f4952523968703caa027a5922263eb97b88bedc3.zip
gdb-f4952523968703caa027a5922263eb97b88bedc3.tar.gz
gdb-f4952523968703caa027a5922263eb97b88bedc3.tar.bz2
Fix use of a dangling pointer for Python breakpoint objects
When a Python script tries to create a breakpoint but fails to do so, gdb.Breakpoint.__init__ raises an exception and the breakpoint does not exist anymore in the Python interpreter. However, GDB still keeps a reference to the Python object to be used for a later hook, which is wrong. This commit adds the necessary cleanup code so that there is no stale reference to this Python object. It also adds a new testcase to reproduce the bug and check the fix. 2016-06-25 Pierre-Marie de Rodat <derodat@adacore.com> gdb/ * python/py-breakpoint.c (bppy_init): Clear bppy_pending_object when there is an error during the breakpoint creation. gdb/testsuite * gdb.python/py-breakpoint-create-fail.c, gdb.python/py-breakpoint-create-fail.exp, gdb.python/py-breakpoint-create-fail.py: New testcase.
Diffstat (limited to 'gdb/python')
-rw-r--r--gdb/python/py-breakpoint.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/gdb/python/py-breakpoint.c b/gdb/python/py-breakpoint.c
index ed9cae6..5918bcc 100644
--- a/gdb/python/py-breakpoint.c
+++ b/gdb/python/py-breakpoint.c
@@ -705,6 +705,7 @@ bppy_init (PyObject *self, PyObject *args, PyObject *kwargs)
}
CATCH (except, RETURN_MASK_ALL)
{
+ bppy_pending_object = NULL;
PyErr_Format (except.reason == RETURN_QUIT
? PyExc_KeyboardInterrupt : PyExc_RuntimeError,
"%s", except.message);