From 882649b7123855a0b87fcee7e4bc043ca2cca711 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Sat, 1 Nov 2014 21:44:10 +0200 Subject: [PATCH] Protect various compgen invocations from -* leakage (Debian: #766163) --- bash_completion | 6 +++--- completions/getent | 8 ++++---- completions/mplayer | 2 +- completions/ntpdate | 2 +- completions/pkg_delete | 2 +- completions/portupgrade | 2 +- completions/rcs | 2 +- test/unit/_tilde.exp | 6 ++++++ 8 files changed, 18 insertions(+), 12 deletions(-) diff --git a/bash_completion b/bash_completion index 57423ab4..24bd2ea1 100644 --- a/bash_completion +++ b/bash_completion @@ -952,7 +952,7 @@ _tilde() local result=0 if [[ $1 == \~* && $1 != */* ]]; then # Try generate ~username completions - COMPREPLY=( $( compgen -P '~' -u "${1#\~}" ) ) + COMPREPLY=( $( compgen -P '~' -u -- "${1#\~}" ) ) result=${#COMPREPLY[@]} # 2>/dev/null for direct invocation, e.g. in the _tilde unit test [[ $result -gt 0 ]] && compopt -o filenames 2>/dev/null @@ -1019,7 +1019,7 @@ _expand() eval cur=$cur 2>/dev/null elif [[ "$cur" == \~* ]]; then cur=${cur#\~} - COMPREPLY=( $( compgen -P '~' -u "$cur" ) ) + COMPREPLY=( $( compgen -P '~' -u -- "$cur" ) ) [[ ${#COMPREPLY[@]} -eq 1 ]] && eval COMPREPLY[0]=${COMPREPLY[0]} return ${#COMPREPLY[@]} fi @@ -1620,7 +1620,7 @@ _cd() for i in ${CDPATH//:/$'\n'}; do # create an array of matched subdirs k="${#COMPREPLY[@]}" - for j in $( compgen -d $i/$cur ); do + for j in $( compgen -d -- $i/$cur ); do if [[ ( $mark_symdirs && -h $j || $mark_dirs && ! -h $j ) && ! -d ${j#$i/} ]]; then j+="/" fi diff --git a/completions/getent b/completions/getent index 2e99f524..52f1ba4d 100644 --- a/completions/getent +++ b/completions/getent @@ -26,19 +26,19 @@ _getent() case $db in passwd) - COMPREPLY=( $( compgen -u "$cur" ) ) + COMPREPLY=( $( compgen -u -- "$cur" ) ) return 0 ;; group) - COMPREPLY=( $( compgen -g "$cur" ) ) + COMPREPLY=( $( compgen -g -- "$cur" ) ) return 0 ;; services) - COMPREPLY=( $( compgen -s "$cur" ) ) + COMPREPLY=( $( compgen -s -- "$cur" ) ) return 0 ;; hosts) - COMPREPLY=( $( compgen -A hostname "$cur" ) ) + COMPREPLY=( $( compgen -A hostname -- "$cur" ) ) return 0 ;; protocols|networks|ahosts|ahostsv4|ahostsv6|rpc) diff --git a/completions/mplayer b/completions/mplayer index 2a65478a..02379083 100644 --- a/completions/mplayer +++ b/completions/mplayer @@ -86,7 +86,7 @@ _mplayer() local IFS=$'\n' for i in ~/.mplayer/skins ${dirs[@]}; do if [[ -d $i && -r $i ]]; then - for j in $( compgen -d $i/$cur ); do + for j in $( compgen -d -- $i/$cur ); do COMPREPLY[$k]=${j#$i/} k=$((++k)) done diff --git a/completions/ntpdate b/completions/ntpdate index dab38477..1f58950a 100644 --- a/completions/ntpdate +++ b/completions/ntpdate @@ -11,7 +11,7 @@ _ntpdate() return 0 ;; -U) - COMPREPLY=( $( compgen -u "$cur" ) ) + COMPREPLY=( $( compgen -u -- "$cur" ) ) return 0 ;; -p) diff --git a/completions/pkg_delete b/completions/pkg_delete index 15770acb..b7415979 100644 --- a/completions/pkg_delete +++ b/completions/pkg_delete @@ -11,7 +11,7 @@ _pkg_delete() [[ "$prev" == -o || "$prev" == -p || "$prev" == -W ]] && return 0 - COMPREPLY=( $( compgen -d "$pkgdir$cur" ) ) + COMPREPLY=( $( compgen -d -- "$pkgdir$cur" ) ) COMPREPLY=( ${COMPREPLY[@]#$pkgdir} ) return 0 diff --git a/completions/portupgrade b/completions/portupgrade index 96e4fb6d..a2a00023 100644 --- a/completions/portupgrade +++ b/completions/portupgrade @@ -9,7 +9,7 @@ _portupgrade() local pkgdir=${PKG_DBDIR:-/var/db/pkg}/ - COMPREPLY=( $( compgen -d "$pkgdir$cur" ) ) + COMPREPLY=( $( compgen -d -- "$pkgdir$cur" ) ) COMPREPLY=( ${COMPREPLY[@]#$pkgdir} ) COMPREPLY=( ${COMPREPLY[@]%-*} ) diff --git a/completions/rcs b/completions/rcs index 67c1c9d8..9446d95a 100644 --- a/completions/rcs +++ b/completions/rcs @@ -13,7 +13,7 @@ _rcs() # deal with relative directory [[ $file == $dir ]] && dir=. - COMPREPLY=( $( compgen -f "$dir/RCS/$file" ) ) + COMPREPLY=( $( compgen -f -- "$dir/RCS/$file" ) ) for (( i=0; i < ${#COMPREPLY[@]}; i++ )); do file=${COMPREPLY[$i]##*/} diff --git a/test/unit/_tilde.exp b/test/unit/_tilde.exp index 2e22b848..19f47241 100644 --- a/test/unit/_tilde.exp +++ b/test/unit/_tilde.exp @@ -46,6 +46,12 @@ sync_after_int set test "~part should complete to ~full" set cmd [format {_tilde "~%s"; printf "%%s\n" "${COMPREPLY[@]}"} $part] assert_bash_list "~$full" $cmd $test +sync_after_int + + +# Debian #766163 +assert_no_complete "_tilde ~-o" +sync_after_int teardown