Fix valgrind error from gdb.decode_line
Commit Message
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-04 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-04 Tom Tromey <tom@tromey.com>
PR symtab/12535:
* gdb.python/python.exp: Test decode_line with empty string
argument.
Change-Id: I1d95812b4b7a21d69a3e9afd05b9e3141a931897
---
gdb/ChangeLog | 6 ++++++
gdb/python/python.c | 9 +++++++++
gdb/testsuite/ChangeLog | 6 ++++++
gdb/testsuite/gdb.python/python.exp | 4 ++++
4 files changed, 25 insertions(+)
Comments
>>>>> "Tom" == Tom Tromey <tom@tromey.com> writes:
Tom> PR symtab/12535 points out that gdb.decode_line("") will cause a
Tom> valgrind report.
I'm checking this in.
Tom
@@ -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);
@@ -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 {