mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-15 04:31:49 +08:00
Fix crash when TUI window creation fails
If a TUI window is written in Python, and if the window construction function fails, then gdb will crash. This patch fixes the crash. gdb/ChangeLog 2020-06-16 Tom Tromey <tom@tromey.com> * python/py-tui.c (tui_py_window::~tui_py_window): Handle case where m_window==nullptr. gdb/testsuite/ChangeLog 2020-06-16 Tom Tromey <tom@tromey.com> * gdb.python/tui-window.py (failwin): New function. Register it as a TUI window type. * gdb.python/tui-window.exp: Create new "fail" layout. Test it.
This commit is contained in:
parent
708a2ffff5
commit
d2d1ea20ae
@ -1,3 +1,8 @@
|
||||
2020-06-16 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* python/py-tui.c (tui_py_window::~tui_py_window): Handle case
|
||||
where m_window==nullptr.
|
||||
|
||||
2020-06-15 Tom Tromey <tromey@adacore.com>
|
||||
|
||||
* windows-nat.c (windows_nat::handle_output_debug_string):
|
||||
|
@ -133,7 +133,10 @@ tui_py_window::~tui_py_window ()
|
||||
{
|
||||
gdbpy_enter enter_py (get_current_arch (), current_language);
|
||||
|
||||
if (PyObject_HasAttrString (m_window.get (), "close"))
|
||||
/* This can be null if the user-provided Python construction
|
||||
function failed. */
|
||||
if (m_window != nullptr
|
||||
&& PyObject_HasAttrString (m_window.get (), "close"))
|
||||
{
|
||||
gdbpy_ref<> result (PyObject_CallMethod (m_window.get (), "close",
|
||||
nullptr));
|
||||
|
@ -1,3 +1,9 @@
|
||||
2020-06-16 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* gdb.python/tui-window.py (failwin): New function. Register it
|
||||
as a TUI window type.
|
||||
* gdb.python/tui-window.exp: Create new "fail" layout. Test it.
|
||||
|
||||
2020-06-16 Gary Benson <gbenson@redhat.com>
|
||||
|
||||
* gdb.python/py-nested-maps.c (create_map): Add missing return
|
||||
|
@ -36,6 +36,7 @@ gdb_test_no_output "source ${remote_python_file}" \
|
||||
"source ${testfile}.py"
|
||||
|
||||
gdb_test_no_output "tui new-layout test test 1 status 0 cmd 1"
|
||||
gdb_test_no_output "tui new-layout fail fail 1 status 0 cmd 1"
|
||||
|
||||
if {![Term::enter_tui]} {
|
||||
unsupported "TUI not supported"
|
||||
@ -49,3 +50,5 @@ Term::check_contents "Window display" "Test: 0"
|
||||
Term::resize 51 51
|
||||
# Remember that a resize request actually does two resizes...
|
||||
Term::check_contents "Window was updated" "Test: 2"
|
||||
|
||||
Term::command "layout fail"
|
||||
|
@ -35,3 +35,9 @@ class TestWindow:
|
||||
self.count = self.count + 1
|
||||
|
||||
gdb.register_window_type("test", TestWindow)
|
||||
|
||||
# A TUI window "constructor" that always fails.
|
||||
def failwin(win):
|
||||
raise RuntimeError("Whoops")
|
||||
|
||||
gdb.register_window_type("fail", failwin)
|
||||
|
Loading…
Reference in New Issue
Block a user