diff options
author | Andrew Burgess <andrew.burgess@embecosm.com> | 2020-11-27 10:46:07 +0000 |
---|---|---|
committer | Andrew Burgess <andrew.burgess@embecosm.com> | 2020-11-27 14:55:55 +0000 |
commit | 3df8c6afdd6d38a7622ff5f4b1a64aff80334ab9 (patch) | |
tree | 9403b027352d60730723ddbd205b017c78aa382b /gdb/printcmd.c | |
parent | b1eea24024e2db6ba46c1a2838e69593e9314d0d (diff) | |
download | gdb-3df8c6afdd6d38a7622ff5f4b1a64aff80334ab9.zip gdb-3df8c6afdd6d38a7622ff5f4b1a64aff80334ab9.tar.gz gdb-3df8c6afdd6d38a7622ff5f4b1a64aff80334ab9.tar.bz2 |
gdb: fix potentially uninitialised variable
In commit:
commit 037d7135de575c9e0c20e9158c105979bfee339c
Date: Mon Nov 16 11:36:56 2020 +0000
gdb: improve command completion for 'print', 'x', and 'display'
A potential use of an uninitialised variable was introduced. This is
fixed in this commit.
Previously when analysing /FMT strings for tab completion we
considered two possibilities, either the user has typed '/', or the
user has typed '/' followed by an alpha-numeric character, as these
are the only valid FMT string characters.
This meant that if the user type, for example '/@' and then tried to
tab complete gdb would use an uninitialised variable.
Currently only the first character after the '/' is checked to see if
it is alpha-numeric, so if a user typed '/x@@' then gdb would be happy
to treat this as a FMT string.
Given the goal of this change was primarily to allow tab completion of
symbols later in the command when a /FMT was used then I decided to
just make the /FMT skipping less smart. Now any characters after the
'/' up to the first white space, will be treated as a FMT string.
gdb/ChangeLog:
* printcmd.c (skip_over_slash_fmt): Reorder code to ensure in_fmt
is always initialized.
Diffstat (limited to 'gdb/printcmd.c')
-rw-r--r-- | gdb/printcmd.c | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/gdb/printcmd.c b/gdb/printcmd.c index a9c64b9..e95b880 100644 --- a/gdb/printcmd.c +++ b/gdb/printcmd.c @@ -1258,27 +1258,38 @@ skip_over_slash_fmt (completion_tracker &tracker, const char **args) bool in_fmt; tracker.set_use_custom_word_point (true); - if (ISALNUM (text[1]) || ISSPACE (text[1])) + if (text[1] == '\0') { - /* Skip over the actual format specification. */ + /* The user tried to complete after typing just the '/' character + of the /FMT string. Step the completer past the '/', but we + don't offer any completions. */ + in_fmt = true; + ++text; + } + else + { + /* The user has typed some characters after the '/', we assume + this is a complete /FMT string, first skip over it. */ text = skip_to_space (text); if (*text == '\0') { + /* We're at the end of the input string. The user has typed + '/FMT' and asked for a completion. Push an empty + completion string, this will cause readline to insert a + space so the user now has '/FMT '. */ in_fmt = true; tracker.add_completion (make_unique_xstrdup (text)); } else { + /* The user has already typed things after the /FMT, skip the + whitespace and return false. Whoever called this function + should then try to complete what comes next. */ in_fmt = false; text = skip_spaces (text); } } - else if (text[1] == '\0') - { - in_fmt = true; - ++text; - } tracker.advance_custom_word_point_by (text - *args); *args = text; |