mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-27 03:54:41 +08:00
gdb/python: missing PyObject_IsTrue error check in bppy_init
As with the previous two commits, this commit fixes a location where we called PyObject_IsTrue without including an error check, this time in bppy_init. The 'qualified' argument is supposed to be a bool, the docs say: The optional QUALIFIED argument is a boolean that allows interpreting the function passed in 'spec' as a fully-qualified name. It is equivalent to 'break''s '-qualified' flag (*note Linespec Locations:: and *note Explicit Locations::). It's not totally clear that the only valid values are True or False, but I'm choosing to interpret the docs that way, and so I've added a PyBool_Type check during argument parsing. Now, if a non-bool is passed the user will get a TypeError during argument parsing. I've added a test to cover this case. This is a potentially breaking change to the Python API, but hopefully this will not impact too many people. I've added a NEWS entry to highlight this change. Reviewed-By: Eli Zaretskii <eliz@gnu.org> Approved-By: Tom Tromey <tom@tromey.com>
This commit is contained in:
parent
ad39b4aae8
commit
8518ce5fc2
3
gdb/NEWS
3
gdb/NEWS
@ -75,6 +75,9 @@
|
||||
** The gdb.MICommand.installed property can only be set to True or
|
||||
False.
|
||||
|
||||
** The 'qualified' argument to gdb.Breakpoint constructor will no
|
||||
longer accept non-bool types.
|
||||
|
||||
* Debugger Adapter Protocol changes
|
||||
|
||||
** The "scopes" request will now return a scope holding global
|
||||
|
@ -927,14 +927,14 @@ bppy_init (PyObject *self, PyObject *args, PyObject *kwargs)
|
||||
char *label = NULL;
|
||||
char *source = NULL;
|
||||
char *function = NULL;
|
||||
PyObject * qualified = NULL;
|
||||
PyObject *qualified = Py_False;
|
||||
|
||||
if (!gdb_PyArg_ParseTupleAndKeywords (args, kwargs, "|siiOOsssOO", keywords,
|
||||
if (!gdb_PyArg_ParseTupleAndKeywords (args, kwargs, "|siiOOsssOO!", keywords,
|
||||
&spec, &type, &access_type,
|
||||
&internal,
|
||||
&temporary, &source,
|
||||
&function, &label, &lineobj,
|
||||
&qualified))
|
||||
&PyBool_Type, &qualified))
|
||||
return -1;
|
||||
|
||||
|
||||
@ -982,10 +982,11 @@ bppy_init (PyObject *self, PyObject *args, PyObject *kwargs)
|
||||
case bp_hardware_breakpoint:
|
||||
{
|
||||
location_spec_up locspec;
|
||||
gdb_assert (PyBool_Check (qualified));
|
||||
symbol_name_match_type func_name_match_type
|
||||
= (qualified != NULL && PyObject_IsTrue (qualified)
|
||||
? symbol_name_match_type::FULL
|
||||
: symbol_name_match_type::WILD);
|
||||
= (qualified == Py_True
|
||||
? symbol_name_match_type::FULL
|
||||
: symbol_name_match_type::WILD);
|
||||
|
||||
if (spec != NULL)
|
||||
{
|
||||
|
@ -792,6 +792,15 @@ proc_with_prefix test_bkpt_qualified {} {
|
||||
$one_location_re \
|
||||
"qualified true"
|
||||
|
||||
# Test qualified with a non-bool type.
|
||||
delete_breakpoints
|
||||
gdb_test \
|
||||
"python gdb.Breakpoint(\"multiply\", qualified=None)" \
|
||||
[multi_line \
|
||||
"Python Exception <class 'TypeError'>: argument 10 must be bool, not None" \
|
||||
"Error occurred in Python: argument 10 must be bool, not None"] \
|
||||
"qualified non_bool_type"
|
||||
|
||||
# Test qualified=True with an explicit function.
|
||||
delete_breakpoints
|
||||
gdb_test \
|
||||
|
Loading…
Reference in New Issue
Block a user