Package: bash
Version: 3.0-16
Severity: normal
In /etc/bash_completion, _root_command and _command do not protect
themself against empty argument, so arguments can be shifted if, for
example, the second is empty and not the third.
To see the problem, one can install the mercurial package. Then, try
to type :
* "hg " and [tab] [tab]. You get the list of hg subcommands
(because bash calls "_hg hg '' hg")
* "sudo hg " and [tab] [tab]. You get the list of files in current
directory.
(because bash calls _root_command that calls _command that calls
"_hg hg hg" (note the missing second empty argument))
Here is a patch that solve this bug.
Best,
Vincent
-- System Information:
Debian Release: testing/unstable
APT prefers unstable
APT policy: (500, 'unstable'), (500, 'testing'), (1, 'experimental')
Architecture: i386 (i686)
Shell: /bin/sh linked to /bin/bash
Kernel: Linux 2.6.12-1-686
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)
Versions of packages bash depends on:
ii base-files 3.1.7 Debian base system miscellaneous f
ii libc6 2.3.5-6 GNU C Library: Shared libraries an
ii libncurses5 5.4-9 Shared libraries for terminal hand
ii passwd 1:4.0.12-1 change and administer password and
bash recommends no packages.
-- no debconf information
--- bash_completion.orig 2005-09-19 23:47:39.000000000 +0200
+++ bash_completion.new 2005-09-19 23:37:12.000000000 +0200
@@ -3109,10 +3109,10 @@
COMP_CWORD=$(( $COMP_CWORD > 0 ? $COMP_CWORD : 1 ))
cur=${COMP_WORDS[COMP_CWORD]}
_COMMAND_FUNC=$func
- _COMMAND_FUNC_ARGS=( $cmd $2 $3 )
+ _COMMAND_FUNC_ARGS=( $cmd "$2" $3 )
COMP_LINE=$cline
COMP_POINT=$(( ${COMP_POINT} - ${#1} - 1 ))
- $func $cmd $2 $3
+ $func $cmd "$2" $3
# remove any \: generated by a command that doesn't
# default to filenames or dirnames (e.g. sudo chown)
if [ "${cspec#*-o }" != "$cspec" ]; then
@@ -3136,7 +3136,7 @@
_root_command()
{
- PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin _command $1 $2 $3
+ PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin _command "$1" "$2" "$3"
}
complete -F _root_command $filenames sudo fakeroot really