Public bug reported:

Binary package hint: bash-completion

The main /etc/bash_completion script and many of the helper scripts
under /etc/bash_completion.d/ fail for shells running with one or both
of "set -o nounset" (fail if variables are used without being defined)
and/or "shopt -s failglob" (fail if a GLOB pattern fails to match).
I run my interactive shells with both these options set.

For example:

bash$ set -o nounset
bash$ source /etc/bash_completion.ORIG
bash: BASH_COMPLETION_DEBUG: unbound variable
bash: BASH_COMPLETION: unbound variable
bash: BASH_COMPLETION_DIR: unbound variable
bash: BASH_COMPLETION_COMPAT_DIR: unbound variable
bash: BASH_COMPLETION: unbound variable
bash: li...@]: unbound variable
bash: BASH_COMPLETION_COMPAT_DIR: unbound variable
bash: BASH_COMPLETION_DIR: unbound variable
bash: BASH_COMPLETION: unbound variable

Also, a few of the "eval" expressions in the scripts use backslashes
but fail to fully protect square bracket characters on arrays, which
are then taken as failed GLOB expressions.

The attached patch fixes at least some of the problems with the main
script so that it runs without error for shells using "set -o nounset"
and "shopt -s failglob".

The helper scripts for findutils and mutt in /etc/bash_completion.d/
also have errors when used in shells using "set -o nounset" and "shopt
-s failglob", but I'm not so confident that I understand them to fix
them correctly.  Here are some patches that remove some of the errors
in these scripts but don't seem to fully work properly:

--- .findutils.ORIG     2010-08-06 19:39:13.000000000 -0400
+++ findutils   2010-10-18 11:52:07.982166655 -0400
@@ -5,7 +5,7 @@
 have find &&
 _find()
 {
-    local cur prev i exprfound onlyonce
+    local cur prev i exprfound= onlyonce
 
     COMPREPLY=()
     _get_comp_words_by_ref cur prev


--- .mutt.ORIG  2010-08-06 19:39:13.000000000 -0400
+++ mutt        2010-10-12 11:23:48.717163963 -0400
@@ -22,6 +22,7 @@
 _muttrc()
 {
     # Search COMP_WORDS for '-F muttrc' or '-Fmuttrc' argument
+    local muttrc=
     set -- "${comp_wor...@]}"
     while [ $# -gt 0 ]; do
         if [ "${1:0:2}" = -F ]; then
@@ -55,13 +56,14 @@
 
     sofar=" $1 "
     shift
-    while [[ "$1" ]]; do
-        newconffiles=( $(sed -n 
's|^source[[:space:]]\{1,\}\([^[:space:]]\{1,\}\).*$|\1|p' $(eval echo $1) ) )
-        for file in "${newconffil...@]}"; do
+    while [[ $# -gt 0 && "$1" ]]; do
+        newconffiles=( $(sed -n 
's|^source[[:space:]]\{1,\}\([^[:space:]]\{1,\}\).*$|\1|p' "$1" ) )
+        for file in "${newconffil...@]-}"; do
             [[ ! "$file" ]] || [[ "${sofar/ ${file} / }" != "$sofar" ]] &&
                 continue
             sofar="$sofar $file"
-            sofar=" $(eval _muttconffiles \"$sofar\" $file) "
+            sofar=$(_muttconffiles "$sofar" "$file")
         done
         shift
     done
@@ -80,8 +82,8 @@
 
     conffiles=( $(eval _muttconffiles $muttrc $muttrc) )
     aliases=( $( sed -n 
's|^alias[[:space:]]\{1,\}\([^[:space:]]\{1,\}\).*$|\1|p' \
-        $(eval echo "${conffil...@]}") ) )
-    COMPREPLY=( "${comprep...@]}" $( compgen -W "${aliases[*]}" -- "$cur" ) )
+        $(eval echo "${conffil...@]:-/dev/null}") ) )
+    COMPREPLY=( "${comprep...@]-}" $( compgen -W "${aliases[*]-}" -- "$cur" ) )
 
     return 0
 }
@@ -101,7 +103,7 @@
             sed -n '2,$s|^\([^[:space:]]\{1,\}\).*|\1|p' ) )
     fi
 
-    COMPREPLY=( "${comprep...@]}" $( compgen -W "${queryresults[*]}" \
+    COMPREPLY=( "${comprep...@]-}" $( compgen -W "${queryresults[*]-}" \
         -- "$cur" ) )
 
     return 0

ProblemType: Bug
DistroRelease: Ubuntu 10.10
Package: bash-completion 1:1.2-2ubuntu1
ProcVersionSignature: Ubuntu 2.6.35-22.34-generic 2.6.35.4
Uname: Linux 2.6.35-22-generic x86_64
Architecture: amd64
Date: Tue Oct 19 02:08:30 2010
EcryptfsInUse: Yes
InstallationMedia: Ubuntu 10.10 "Maverick Meerkat" - Release amd64 (20101007)
PackageArchitecture: all
ProcEnviron:
 LC_CTYPE=en_CA.utf8
 LC_COLLATE=C
 PATH=(custom, user)
 LANG=C
 SHELL=/bin/bash
SourcePackage: bash-completion

** Affects: bash-completion (Ubuntu)
     Importance: Undecided
         Status: New


** Tags: amd64 apport-bug maverick

-- 
bash_completion script errors: undefined variables, failed GLOB
https://bugs.launchpad.net/bugs/663111
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to