summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2019-12-21 09:51:05 -0700
committerTom Tromey <tom@tromey.com>2020-01-14 17:57:52 -0700
commitff47f4f06d296b672337e2c7363a745cd2725f58 (patch)
tree9a60eb2433cffbcbfab90243b5fe2744a8e8cd76
parentb300843444cf833f7b3943ebae060c3d88b4ce91 (diff)
downloadbinutils-gdb-ff47f4f06d296b672337e2c7363a745cd2725f58.tar.gz
Fix valgrind error from gdb.decode_line
PR symtab/12535 points out that gdb.decode_line("") will cause a valgrind report. I think the empty linespec does not really make sense. So, this patch changes gdb.decode_line to treat a whitespace-only linespec the same as a non-existing argument. gdb/ChangeLog 2020-01-14 Tom Tromey <tom@tromey.com> PR symtab/12535: * python/python.c (gdbpy_decode_line): Treat empty string the same as no argument. gdb/testsuite/ChangeLog 2020-01-14 Tom Tromey <tom@tromey.com> PR symtab/12535: * gdb.python/python.exp: Test decode_line with empty string argument. Change-Id: I1d95812b4b7a21d69a3e9afd05b9e3141a931897
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/python/python.c9
-rw-r--r--gdb/testsuite/ChangeLog6
-rw-r--r--gdb/testsuite/gdb.python/python.exp4
4 files changed, 25 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 213f2d03956..d348abbf585 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,11 @@
2020-01-14 Tom Tromey <tom@tromey.com>
+ PR symtab/12535:
+ * python/python.c (gdbpy_decode_line): Treat empty string the same
+ as no argument.
+
+2020-01-14 Tom Tromey <tom@tromey.com>
+
* Makefile.in (CLIBS): Remove second use of $(LIBIBERTY).
2020-01-14 Tom Tromey <tom@tromey.com>
diff --git a/gdb/python/python.c b/gdb/python/python.c
index e0c05f1d068..d6f7f99c457 100644
--- a/gdb/python/python.c
+++ b/gdb/python/python.c
@@ -810,6 +810,15 @@ gdbpy_decode_line (PyObject *self, PyObject *args)
if (! PyArg_ParseTuple (args, "|s", &arg))
return NULL;
+ /* Treat a string consisting of just whitespace the same as
+ NULL. */
+ if (arg != NULL)
+ {
+ arg = skip_spaces (arg);
+ if (*arg == '\0')
+ arg = NULL;
+ }
+
if (arg != NULL)
location = string_to_event_location_basic (&arg, python_language,
symbol_name_match_type::WILD);
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 4c1e6040d67..fd9ba7ea619 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2020-01-14 Tom Tromey <tom@tromey.com>
+
+ PR symtab/12535:
+ * gdb.python/python.exp: Test decode_line with empty string
+ argument.
+
2020-01-14 Bernd Edlinger <bernd.edlinger@hotmail.de>
* gdb.base/skip-inline.exp: Extend test.
diff --git a/gdb/testsuite/gdb.python/python.exp b/gdb/testsuite/gdb.python/python.exp
index f002497e9d0..a50a7b43e2c 100644
--- a/gdb/testsuite/gdb.python/python.exp
+++ b/gdb/testsuite/gdb.python/python.exp
@@ -234,6 +234,10 @@ gdb_test "python print (len(symtab))" "2" "test decode_line current location"
gdb_test "python print (symtab\[0\])" "None" "test decode_line expression parse"
gdb_test "python print (len(symtab\[1\]))" "1" "test decode_line current location"
+# Test that decode_line with an empty string argument does not crash.
+gdb_py_test_silent_cmd "python symtab2 = gdb.decode_line('')" \
+ "test decode_line with empty string" 1
+
if { [is_remote host] } {
set python_c [string_to_regexp "python.c"]
} else {