gdb: fix potentially uninitialised variable
In commit:
commit 037d7135de
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.
This commit is contained in:
parent
b1eea24024
commit
3df8c6afdd
2 changed files with 23 additions and 7 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
2020-11-27 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||||
|
|
||||||
|
* printcmd.c (skip_over_slash_fmt): Reorder code to ensure in_fmt
|
||||||
|
is always initialized.
|
||||||
|
|
||||||
2020-11-26 Przemyslaw Wirkus <przemyslaw.wirkus@arm.com>
|
2020-11-26 Przemyslaw Wirkus <przemyslaw.wirkus@arm.com>
|
||||||
|
|
||||||
* features/aarch64-fpu.c (create_feature_aarch64_fpu): Regenerate.
|
* features/aarch64-fpu.c (create_feature_aarch64_fpu): Regenerate.
|
||||||
|
|
|
@ -1258,27 +1258,38 @@ skip_over_slash_fmt (completion_tracker &tracker, const char **args)
|
||||||
bool in_fmt;
|
bool in_fmt;
|
||||||
tracker.set_use_custom_word_point (true);
|
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);
|
text = skip_to_space (text);
|
||||||
|
|
||||||
if (*text == '\0')
|
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;
|
in_fmt = true;
|
||||||
tracker.add_completion (make_unique_xstrdup (text));
|
tracker.add_completion (make_unique_xstrdup (text));
|
||||||
}
|
}
|
||||||
else
|
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;
|
in_fmt = false;
|
||||||
text = skip_spaces (text);
|
text = skip_spaces (text);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (text[1] == '\0')
|
|
||||||
{
|
|
||||||
in_fmt = true;
|
|
||||||
++text;
|
|
||||||
}
|
|
||||||
|
|
||||||
tracker.advance_custom_word_point_by (text - *args);
|
tracker.advance_custom_word_point_by (text - *args);
|
||||||
*args = text;
|
*args = text;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue