aboutsummaryrefslogtreecommitdiff
path: root/gdb/python
diff options
context:
space:
mode:
authorAndrew Burgess <aburgess@redhat.com>2024-11-10 15:50:26 +0000
committerAndrew Burgess <aburgess@redhat.com>2024-11-14 19:34:44 +0000
commitad39b4aae84a224dc5451d6a5f707b1db67a7b7e (patch)
treeba5c21256f770093040370fd7f61285f0f45b395 /gdb/python
parent5209b83f530fad1598db3eeb406762bf3fa3d5d2 (diff)
downloadbinutils-ad39b4aae84a224dc5451d6a5f707b1db67a7b7e.zip
binutils-ad39b4aae84a224dc5451d6a5f707b1db67a7b7e.tar.gz
binutils-ad39b4aae84a224dc5451d6a5f707b1db67a7b7e.tar.bz2
gdb/python: missing PyObject_IsTrue error check in micmdpy_set_installed
Like the previous commit, I discovered that in micmdpy_set_installed we were calling PyObject_IsTrue, but not checking for a possible error value being returned. The micmdpy_set_installed function implements the gdb.MICommand.installed attribute, and the documentation indicates that this attribute should only be assigned a bool: This attribute is read-write, setting this attribute to 'False' will uninstall the command, removing it from the set of available commands. Setting this attribute to 'True' will install the command for use. So I propose that instead of using PyObject_IsTrue we use PyBool_Check, and if the new value fails this check we raise an error. We can then compare the new value to Py_True directly instead of calling PyObject_IsTrue. This is a potentially breaking change to the Python API, but hopefully this will not impact too many people, and the fix is pretty easy (switch to using a bool). I've added a NEWS entry to draw attention to this change. Approved-By: Tom Tromey <tom@tromey.com>
Diffstat (limited to 'gdb/python')
-rw-r--r--gdb/python/py-micmd.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/gdb/python/py-micmd.c b/gdb/python/py-micmd.c
index f4abf2b..e051b90 100644
--- a/gdb/python/py-micmd.c
+++ b/gdb/python/py-micmd.c
@@ -509,7 +509,16 @@ micmdpy_set_installed (PyObject *self, PyObject *newvalue, void *closure)
{
struct micmdpy_object *micmd_obj = (struct micmdpy_object *) self;
- bool installed_p = PyObject_IsTrue (newvalue);
+ if (!PyBool_Check (newvalue))
+ {
+ PyErr_Format (PyExc_TypeError,
+ _("gdb.MICommand.installed must be set to a bool, not %s"),
+ newvalue == Py_None ? "None" : Py_TYPE(newvalue)->tp_name);
+ return -1;
+ }
+
+ bool installed_p = newvalue == Py_True;
+
if (installed_p == (micmd_obj->mi_command != nullptr))
return 0;