diff options
author | Philippe Waroquiers <philippe.waroquiers@skynet.be> | 2019-06-23 15:34:15 +0200 |
---|---|---|
committer | Philippe Waroquiers <philippe.waroquiers@skynet.be> | 2019-06-25 19:15:16 +0200 |
commit | b65b566cdcb577edb57616c5b49a2f245b56325c (patch) | |
tree | 860272ce3962c954a3c78fca764c1537fe3327bf /gdb/cli | |
parent | 9b444f9533c38016e4f2de0198c889b13a62d2bc (diff) | |
download | gdb-b65b566cdcb577edb57616c5b49a2f245b56325c.zip gdb-b65b566cdcb577edb57616c5b49a2f245b56325c.tar.gz gdb-b65b566cdcb577edb57616c5b49a2f245b56325c.tar.bz2 |
Fix alias command not detecting non matching prefix & sometimes asserting.
alias_command does not detect that the prefixes of the alias command and the
aliased command are not matching: it is comparing the alias prefix
with itself, instead of comparing it with the aliased command prefix.
This causes either the alias command to silently do nothing,
or to have GDB asserting:
(gdb) alias assigne imprime limite-elements = set print elements
../../binutils-gdb/gdb/cli/cli-cmds.c:1552: internal-error: void alias_command(const char*, int): Assertion `c_command != NULL && c_command != (struct cmd_list_element *) -1' failed.
A problem internal to GDB has been detected,
Fix the logic, and update gdb.base/alias.exp to test these cases.
gdb/ChangeLog
2019-06-25 Philippe Waroquiers <philippe.waroquiers@skynet.be>
* cli/cli-cmds.c (alias_command): Compare the alias prefix
with the command prefix.
gdb/testsuite/ChangeLog
2019-06-25 Philippe Waroquiers <philippe.waroquiers@skynet.be>
* gdb.base/alias.exp: Test non matching/non existing prefixes.
Diffstat (limited to 'gdb/cli')
-rw-r--r-- | gdb/cli/cli-cmds.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c index 62f4d7f..5124ab3 100644 --- a/gdb/cli/cli-cmds.c +++ b/gdb/cli/cli-cmds.c @@ -1518,8 +1518,8 @@ alias_command (const char *args, int from_tty) Example: alias spe = set print elements Otherwise ALIAS and COMMAND must have the same number of words, - and every word except the last must match; and the last word of - ALIAS is made an alias of the last word of COMMAND. + and every word except the last must identify the same prefix command; + and the last word of ALIAS is made an alias of the last word of COMMAND. Example: alias set print elms = set pr elem Note that unambiguous abbreviations are allowed. */ @@ -1538,10 +1538,11 @@ alias_command (const char *args, int from_tty) error (_("Mismatched command length between ALIAS and COMMAND.")); /* Create copies of ALIAS and COMMAND without the last word, - and use that to verify the leading elements match. */ + and use that to verify the leading elements give the same + prefix command. */ std::string alias_prefix_string (argv_to_string (alias_argv, alias_argc - 1)); - std::string command_prefix_string (argv_to_string (alias_argv, + std::string command_prefix_string (argv_to_string (command_argv.get (), command_argc - 1)); alias_prefix = alias_prefix_string.c_str (); command_prefix = command_prefix_string.c_str (); |