Fix interpreter-exec crash

PR mi/10347 points out that using interpreter-exec inside of a
"define" command will crash gdb.  The bug here is that
gdb_setup_readline doesn't check for the case where instream==nullptr.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=10347
This commit is contained in:
Tom Tromey
2022-08-12 13:15:01 -06:00
parent 1e28eebbbc
commit 058dc2c959
2 changed files with 15 additions and 2 deletions

View File

@ -1332,8 +1332,10 @@ gdb_setup_readline (int editing)
/* If the input stream is connected to a terminal, turn on editing. /* If the input stream is connected to a terminal, turn on editing.
However, that is only allowed on the main UI, as we can only have However, that is only allowed on the main UI, as we can only have
one instance of readline. */ one instance of readline. Also, INSTREAM might be nullptr when
if (ISATTY (ui->instream) && editing && ui == main_ui) executing a user-defined command. */
if (ui->instream != nullptr && ISATTY (ui->instream)
&& editing && ui == main_ui)
{ {
/* Tell gdb that we will be using the readline library. This /* Tell gdb that we will be using the readline library. This
could be overwritten by a command in .gdbinit like 'set could be overwritten by a command in .gdbinit like 'set

View File

@ -79,6 +79,17 @@ gdb_test_multiple "interpreter-exec mi3 \"-break-insert main\"" "" {
} }
} }
set test "define hello command"
set commands "interpreter-exec mi3 \"-data-evaluate-expression 23\""
gdb_test_multiple "define hello" "$test" {
-re "Type commands for definition of \"hello\".\r\nEnd with a line saying just \"end\".\r\n>$" {
pass "$test"
}
}
gdb_test "$commands\nend" "" "finish defining hello command"
gdb_test "hello" [string_to_regexp "^done,value=\"23\""]
if ![runto_main] then { if ![runto_main] then {
return -1 return -1
} }