mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-01 20:12:01 +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:
@ -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>
|
2018-09-14 Sandra Loosemore <sandra@codesourcery.com>
|
||||||
|
|
||||||
* nios2-tdep.c (nios2_type_align): New.
|
* 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);
|
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
|
/* Use the console interpreter uiout to have the same print format
|
||||||
for console or MI. */
|
for console or MI. */
|
||||||
interp = interp_lookup (current_ui, "console");
|
interp = interp_lookup (current_ui, "console");
|
||||||
current_uiout = interp->interp_ui_out ();
|
current_uiout = interp->interp_ui_out ();
|
||||||
|
|
||||||
scoped_restore preventer = prevent_dont_repeat ();
|
scoped_restore preventer = prevent_dont_repeat ();
|
||||||
if (to_string)
|
if (to_string)
|
||||||
to_string_res = execute_control_commands_to_string (lines.get (),
|
to_string_res = execute_control_commands_to_string (lines.get (),
|
||||||
from_tty);
|
from_tty);
|
||||||
else
|
else
|
||||||
execute_control_commands (lines.get (), from_tty);
|
execute_control_commands (lines.get (), from_tty);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Do any commands attached to breakpoint we stopped at. */
|
||||||
|
bpstat_do_actions ();
|
||||||
}
|
}
|
||||||
CATCH (except, RETURN_MASK_ALL)
|
CATCH (except, RETURN_MASK_ALL)
|
||||||
{
|
{
|
||||||
@ -624,9 +630,6 @@ execute_gdb_command (PyObject *self, PyObject *args, PyObject *kw)
|
|||||||
}
|
}
|
||||||
END_CATCH
|
END_CATCH
|
||||||
|
|
||||||
/* Do any commands attached to breakpoint we stopped at. */
|
|
||||||
bpstat_do_actions ();
|
|
||||||
|
|
||||||
if (to_string)
|
if (to_string)
|
||||||
return PyString_FromString (to_string_res.c_str ());
|
return PyString_FromString (to_string_res.c_str ());
|
||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
|
Reference in New Issue
Block a user