From: Tom Tromey Date: Thu, 15 Jul 2021 16:13:18 +0000 (-0600) Subject: Avoid expression parsing crash with unknown language X-Git-Tag: gdb-11.1-release~87 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e22715ce300957aabdf908a76fb1bf8bc17bba21;p=thirdparty%2Fbinutils-gdb.git Avoid expression parsing crash with unknown language PR gdb/28093 points out that gdb crashes when language is set to "unknown" and expression parsing is attempted. At first I thought this was a regression due to the expression rewrite, but it turns out that older versions crash as well. This patch avoids the crash by changing the default expression parser to throw an exception. I think this is preferable -- the current behavior of silently doing nothing does not really make sense. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28093 (cherry picked from commit dcd482c1b756d9da2130552a6eb58b852d6efb97) gdb/ChangeLog 2021-07-19 Tom Tromey PR gdb/28093 * language.c (auto_or_unknown_language::parser): Call error. gdb/testsuite/ChangeLog 2021-07-19 Tom Tromey PR gdb/28093 * gdb.base/langs.exp: Add tests. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index f09ff9b6425..c630bca50c8 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2021-07-19 Tom Tromey + + PR gdb/28093 + * language.c (auto_or_unknown_language::parser): Call error. + 2021-07-17 Sergey Belyashov * Makefile.in (ALL_TARGET_OBS): Add z80-tdep.c. diff --git a/gdb/language.c b/gdb/language.c index 0d1e3848de8..45ce2ebcc92 100644 --- a/gdb/language.c +++ b/gdb/language.c @@ -825,8 +825,8 @@ public: int parser (struct parser_state *ps) const override { - /* No parsing is done, just claim success. */ - return 1; + error (_("expression parsing not implemented for language \"%s\""), + natural_name ()); } /* See language.h. */ diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 16df96bbeb0..87c3a78f617 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2021-07-19 Tom Tromey + + PR gdb/28093 + * gdb.base/langs.exp: Add tests. + 2021-07-14 Tom de Vries * lib/gdb.exp (have_index): New proc. diff --git a/gdb/testsuite/gdb.base/langs.exp b/gdb/testsuite/gdb.base/langs.exp index 15908b0a19a..631401a8eab 100644 --- a/gdb/testsuite/gdb.base/langs.exp +++ b/gdb/testsuite/gdb.base/langs.exp @@ -111,6 +111,12 @@ if [runto csub] then { "set lang to minimal" gdb_test "print x" " = 5000" "print parameter value" + + # Ensure this at least does not crash. + gdb_test_no_output "set language unknown" + gdb_test "print x" \ + "expression parsing not implemented for language .Unknown." \ + "expression parsing does not crash for unknown" } set timeout $oldtimeout