aboutsummaryrefslogtreecommitdiff
path: root/gdb/python
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2016-05-18 21:19:17 -0600
committerTom Tromey <tom@tromey.com>2016-05-23 10:08:34 -0600
commit0f6ed0e0efe2c4dcd35b0e483dc3b5da7fe4edf0 (patch)
tree5dfc9cba90af71c05055effd27973c1b7297ccb3 /gdb/python
parentd9eca1df01c0e6f7f22566c154e63b1df9315790 (diff)
downloadgdb-0f6ed0e0efe2c4dcd35b0e483dc3b5da7fe4edf0.zip
gdb-0f6ed0e0efe2c4dcd35b0e483dc3b5da7fe4edf0.tar.gz
gdb-0f6ed0e0efe2c4dcd35b0e483dc3b5da7fe4edf0.tar.bz2
Fix PR python/19438, PR python/18393 - initialize dictionaries
This fixes PR python/19438 and PR python/18393. Both bugs are about invoking dir() on some Python object implemented by gdb, and getting a crash. The crash happens because the dictionary field of these objects was not initialized. Apparently what happens is that this field can be lazily initialized by Python when assigning to an attribute; and it can also be handled ok when using dir() but without __dict__ defined; but gdb defines __dict__ because this isn't supplied automatically by Python. The docs on this seem rather sparse, but this patch works ok. An alternative might be to lazily create the dictionary in gdb_py_generic_dict, but I went with this approach because it seemed more straightforward. Built and regtested on x86-64 Fedora 23. 2016-05-23 Tom Tromey <tom@tromey.com> PR python/19438, PR python/18393: * python/py-objfile.c (objfpy_initialize): Initialize self->dict. * python/py-progspace.c (pspy_initialize): Initialize self->dict. 2016-05-23 Tom Tromey <tom@tromey.com> PR python/19438, PR python/18393: * gdb.python/py-progspace.exp: Add "dir" test. * gdb.python/py-objfile.exp: Add "dir" test.
Diffstat (limited to 'gdb/python')
-rw-r--r--gdb/python/py-objfile.c5
-rw-r--r--gdb/python/py-progspace.c5
2 files changed, 8 insertions, 2 deletions
diff --git a/gdb/python/py-objfile.c b/gdb/python/py-objfile.c
index cd26c5b..82df4b2 100644
--- a/gdb/python/py-objfile.c
+++ b/gdb/python/py-objfile.c
@@ -196,7 +196,10 @@ static int
objfpy_initialize (objfile_object *self)
{
self->objfile = NULL;
- self->dict = NULL;
+
+ self->dict = PyDict_New ();
+ if (self->dict == NULL)
+ return 0;
self->printers = PyList_New (0);
if (self->printers == NULL)
diff --git a/gdb/python/py-progspace.c b/gdb/python/py-progspace.c
index e1258c7..6fc53cb 100644
--- a/gdb/python/py-progspace.c
+++ b/gdb/python/py-progspace.c
@@ -97,7 +97,10 @@ static int
pspy_initialize (pspace_object *self)
{
self->pspace = NULL;
- self->dict = NULL;
+
+ self->dict = PyDict_New ();
+ if (self->dict == NULL)
+ return 0;
self->printers = PyList_New (0);
if (self->printers == NULL)