mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-18 12:24:38 +08:00
Fix possible exception leak in python.c
In the Python code, gdb exceptions may not leak into the Python core. execute_gdb_command was calling bpstat_do_actions outside of a TRY/CATCH; which seemed risky. I don't have a test case for this, but if bpstat_do_actions could ever throw, it could crash gdb. This patch introduces a new scope in order to preserve the current semantics, so it is looks a bit bigger than it really is. Tested on x86-64 Fedora 28. gdb/ChangeLog 2018-09-07 Tom Tromey <tom@tromey.com> * python/python.c (execute_gdb_command): Call bpstat_do_actions inside the TRY.
This commit is contained in:
parent
f70e088ff4
commit
a3a6aef409
@ -1,3 +1,8 @@
|
||||
2018-09-07 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* python/python.c (execute_gdb_command): Call bpstat_do_actions
|
||||
inside the TRY.
|
||||
|
||||
2018-09-14 Sandra Loosemore <sandra@codesourcery.com>
|
||||
|
||||
* nios2-tdep.c (nios2_type_align): New.
|
||||
|
@ -602,21 +602,27 @@ execute_gdb_command (PyObject *self, PyObject *args, PyObject *kw)
|
||||
|
||||
counted_command_line lines = read_command_lines_1 (reader, 1, nullptr);
|
||||
|
||||
scoped_restore save_async = make_scoped_restore (¤t_ui->async, 0);
|
||||
{
|
||||
scoped_restore save_async = make_scoped_restore (¤t_ui->async,
|
||||
0);
|
||||
|
||||
scoped_restore save_uiout = make_scoped_restore (¤t_uiout);
|
||||
scoped_restore save_uiout = make_scoped_restore (¤t_uiout);
|
||||
|
||||
/* Use the console interpreter uiout to have the same print format
|
||||
for console or MI. */
|
||||
interp = interp_lookup (current_ui, "console");
|
||||
current_uiout = interp->interp_ui_out ();
|
||||
/* Use the console interpreter uiout to have the same print format
|
||||
for console or MI. */
|
||||
interp = interp_lookup (current_ui, "console");
|
||||
current_uiout = interp->interp_ui_out ();
|
||||
|
||||
scoped_restore preventer = prevent_dont_repeat ();
|
||||
if (to_string)
|
||||
to_string_res = execute_control_commands_to_string (lines.get (),
|
||||
from_tty);
|
||||
else
|
||||
execute_control_commands (lines.get (), from_tty);
|
||||
scoped_restore preventer = prevent_dont_repeat ();
|
||||
if (to_string)
|
||||
to_string_res = execute_control_commands_to_string (lines.get (),
|
||||
from_tty);
|
||||
else
|
||||
execute_control_commands (lines.get (), from_tty);
|
||||
}
|
||||
|
||||
/* Do any commands attached to breakpoint we stopped at. */
|
||||
bpstat_do_actions ();
|
||||
}
|
||||
CATCH (except, RETURN_MASK_ALL)
|
||||
{
|
||||
@ -624,9 +630,6 @@ execute_gdb_command (PyObject *self, PyObject *args, PyObject *kw)
|
||||
}
|
||||
END_CATCH
|
||||
|
||||
/* Do any commands attached to breakpoint we stopped at. */
|
||||
bpstat_do_actions ();
|
||||
|
||||
if (to_string)
|
||||
return PyString_FromString (to_string_res.c_str ());
|
||||
Py_RETURN_NONE;
|
||||
|
Loading…
Reference in New Issue
Block a user