diff options
author | Pedro Alves <palves@redhat.com> | 2017-11-25 00:20:31 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2017-11-25 00:20:31 +0000 |
commit | a81aaca0578ee91ce1cee56c0a31e26c2a5ef581 (patch) | |
tree | 798c788bd50a995f352ed34b91e10cf7dbd1883d | |
parent | 6a3c6ee41898743234d8fd9f9cab15f2ecdaba49 (diff) | |
download | gdb-a81aaca0578ee91ce1cee56c0a31e26c2a5ef581.zip gdb-a81aaca0578ee91ce1cee56c0a31e26c2a5ef581.tar.gz gdb-a81aaca0578ee91ce1cee56c0a31e26c2a5ef581.tar.bz2 |
Fix completing an empty string
Earlier while working on the big completer rework series, I managed to
break
(gdb) [TAB]
locally, and make GDB crash, but only notice a few weeks down the
road, because we have no test for that...
I also noticed that:
(gdb) [TAB]
didn't work (didn't show all commands as matches), even though
entering a command with leading whitespace works:
(gdb) help
This commit fixes the latter and adds a testcase that covers both
issues.
The gdb.base/completion.exp change is necessary because the new test
has a file name that also starts with "gdb.base/complet", making that
particular test ambiguous. Adding another letter disambiguates.
gdb/ChangeLog:
2017-11-25 Pedro Alves <palves@redhat.com>
* completer.c (complete_line_internal_1): Skip spaces until the
start of the command.
gdb/testsuite/ChangeLog:
2017-11-25 Pedro Alves <palves@redhat.com>
* gdb.base/complete-empty.exp: New file.
* gdb.base/completion.exp: Adjust.
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/completer.c | 9 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/complete-empty.exp | 44 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/completion.exp | 6 |
5 files changed, 63 insertions, 6 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index befce60..4e0b45e 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2017-11-25 Pedro Alves <palves@redhat.com> + + * completer.c (complete_line_internal_1): Skip spaces until the + start of the command. + 2017-11-24 Pedro Alves <palves@redhat.com> * cp-support.c (cp_symbol_name_matches_1): New, factored out from diff --git a/gdb/completer.c b/gdb/completer.c index 68e9171..f9ece59 100644 --- a/gdb/completer.c +++ b/gdb/completer.c @@ -1270,10 +1270,13 @@ complete_line_internal_1 (completion_tracker &tracker, word = tmp_command + point - strlen (text); } - if (point == 0) + /* Move P up to the start of the command. */ + p = skip_spaces (p); + + if (*p == '\0') { - /* An empty line we want to consider ambiguous; that is, it - could be any command. */ + /* An empty line is ambiguous; that is, it could be any + command. */ c = CMD_LIST_AMBIGUOUS; result_list = 0; } diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index b45ff7b..afc85c8 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-11-25 Pedro Alves <palves@redhat.com> + + * gdb.base/complete-empty.exp: New file. + * gdb.base/completion.exp: Adjust. + 2017-11-25 Pedro Alves <palves@redhat.com> * gdb.linespec/cpls-ops.cc: New file. diff --git a/gdb/testsuite/gdb.base/complete-empty.exp b/gdb/testsuite/gdb.base/complete-empty.exp new file mode 100644 index 0000000..dc57fd0 --- /dev/null +++ b/gdb/testsuite/gdb.base/complete-empty.exp @@ -0,0 +1,44 @@ +# Copyright 2017 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# This file is part of the gdb testsuite. + +load_lib completion-support.exp + +gdb_exit +gdb_start + +# Start of tests. + +# Test TAB with no input. +proc_with_prefix empty-input-line {} { + # Set max-completions to 1 to avoid having to hardcode a set of + # command names. + gdb_test_no_output "set max-completions 1" + + # Given the completion limit, this completes to the command with + # the lowest alphanumeric sort, which is, and is likely to remain, + # "!". + test_gdb_complete_unique "" "!" " " 1 + + # Same, but with some leading whitespace. + test_gdb_complete_unique " " " !" " " 1 +} + +proc test_driver {} { + empty-input-line +} + +test_driver diff --git a/gdb/testsuite/gdb.base/completion.exp b/gdb/testsuite/gdb.base/completion.exp index 9c7c17a..4e8187a 100644 --- a/gdb/testsuite/gdb.base/completion.exp +++ b/gdb/testsuite/gdb.base/completion.exp @@ -722,13 +722,13 @@ gdb_test "complete file ./gdb.base/compl" \ "file ./gdb.base/completion\\.exp.*" \ "complete-command 'file ./gdb.base/compl'" -set test "complete 'file ./gdb.base/complet'" -send_gdb "file ./gdb.base/complet\t" +set test "complete 'file ./gdb.base/completi'" +send_gdb "file ./gdb.base/completi\t" gdb_test_multiple "" "$test" { -re "^file ./gdb.base/completion\\.exp $" { send_gdb "\n" # Ignore the exact error message. - gdb_test_multiple "" "complete 'file ./gdb.base/complet'" { + gdb_test_multiple "" "complete 'file ./gdb.base/completi'" { -re "\r\nA program is being debugged already\\.\[\r\n\]+Are you sure you want to change the file\\? \\(y or n\\) $" { send_gdb "n\n" exp_continue |