Avoid expression parsing crash with unknown language
authorTom Tromey <tromey@adacore.com>
Thu, 15 Jul 2021 16:13:18 +0000 (10:13 -0600)
committerTom Tromey <tromey@adacore.com>
Mon, 19 Jul 2021 17:01:47 +0000 (11:01 -0600)
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  <tromey@adacore.com>

PR gdb/28093
* language.c (auto_or_unknown_language::parser): Call error.

gdb/testsuite/ChangeLog
2021-07-19  Tom Tromey  <tromey@adacore.com>

PR gdb/28093
* gdb.base/langs.exp: Add tests.

gdb/ChangeLog
gdb/language.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/langs.exp

index f09ff9b64251c6db03f223f05d4e3d3ccf025724..c630bca50c81cc7007316e50fd462cf6c09343d1 100644 (file)
@@ -1,3 +1,8 @@
+2021-07-19  Tom Tromey  <tromey@adacore.com>
+
+       PR gdb/28093
+       * language.c (auto_or_unknown_language::parser): Call error.
+
 2021-07-17  Sergey Belyashov  <Sergey.Belyashov@gmail.com>
 
        * Makefile.in (ALL_TARGET_OBS): Add z80-tdep.c.
index 0d1e3848de858c0113e8f608768155a86f602fd4..45ce2ebcc92c82a52a9ea5f72b2b7a658f807ed9 100644 (file)
@@ -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.  */
index 16df96bbeb01bdcdd5501e70ca8c21a55683ef8a..87c3a78f617331f83fccffe578639218fa7832fc 100644 (file)
@@ -1,3 +1,8 @@
+2021-07-19  Tom Tromey  <tromey@adacore.com>
+
+       PR gdb/28093
+       * gdb.base/langs.exp: Add tests.
+
 2021-07-14  Tom de Vries  <tdevries@suse.de>
 
        * lib/gdb.exp (have_index): New proc.
index 15908b0a19aaefece20b48c18c3f2fac5389f525..631401a8eabbb4b0a763a38cd0561095601e75f4 100644 (file)
@@ -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
This page took 0.038005 seconds and 4 git commands to generate.