Skip to content

Commit

Permalink
gdb/tui: Prevent exceptions from trying to cross readline
Browse files Browse the repository at this point in the history
This is triggered by simply scrolling off the end of the dissasembly
window.  This commit doesn't fix the actual exception that is being
thrown, which will still need to be fixed, but makes sure that we
don't ever throw an exception out to readline.

gdb/ChangeLog:
yyyy-mm-dd  Pedro Alves  <[email protected]>

        PR tui/9765
        * tui/tui-io.c (tui_getc): Rename to ...
        (tui_getc_1): ... this.
        (tui_get): New, reimplent as try/catch wrapper around tui_getc_1.

Change-Id: I2e32a401ab34404b2132ec82a3e1c17b9b723e41
  • Loading branch information
palves authored and T-J-Teru committed Jan 24, 2020
1 parent a05d007 commit 2f26767
Showing 1 changed file with 28 additions and 3 deletions.
31 changes: 28 additions & 3 deletions gdb/tui/tui-io.c
Original file line number Diff line number Diff line change
Expand Up @@ -950,10 +950,12 @@ tui_dispatch_ctrl_char (unsigned int ch)
return 0;
}

/* Get a character from the command window. This is called from the
readline package. */
/* Main worker for tui_getc. Get a character from the command window.
This is called from the readline package, but wrapped in a
try/catch by tui_getc. */

static int
tui_getc (FILE *fp)
tui_getc_1 (FILE *fp)
{
int ch;
WINDOW *w;
Expand Down Expand Up @@ -1036,6 +1038,29 @@ tui_getc (FILE *fp)
return ch;
}

/* Get a character from the command window. This is called from the
readline package. */

static int
tui_getc (FILE *fp)
{
try
{
return tui_getc_1 (fp);
}
catch (const gdb_exception &ex)
{
/* Just in case, don't ever let an exception escape to readline.
This shouldn't ever happen, but if it does, print the
exception instead of just crashing GDB. */
exception_print (gdb_stderr, ex);

/* If we threw an exception, it's because we recognized the
character. */
return 0;
}
}

/* See tui-io.h. */

gdb::unique_xmalloc_ptr<char>
Expand Down

0 comments on commit 2f26767

Please sign in to comment.