diff options
| author | Richard Burke <rich.g.burke@gmail.com> | 2016-10-05 23:10:25 +0100 |
|---|---|---|
| committer | Richard Burke <rich.g.burke@gmail.com> | 2016-10-05 23:10:25 +0100 |
| commit | b2b5c9e3fbce56ae131cb8cfe3808913566754c5 (patch) | |
| tree | 164164979f9c68fd744780005c4c1ecf2f8de780 | |
| parent | ced72e4c09ac3502cb4e7da241cf47f4edf09f62 (diff) | |
| download | vis-b2b5c9e3fbce56ae131cb8cfe3808913566754c5.tar.gz vis-b2b5c9e3fbce56ae131cb8cfe3808913566754c5.tar.xz | |
Harden vis-complete
| -rwxr-xr-x | vis-complete | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/vis-complete b/vis-complete index fceea68..3a2d97b 100755 --- a/vis-complete +++ b/vis-complete @@ -3,6 +3,7 @@ set -e PATTERN="" COMPLETE_WORD=0 +FIND_FILE_LIMIT=1000 while [ $# -gt 0 ]; do case "$1" in @@ -24,12 +25,16 @@ while [ $# -gt 0 ]; do esac done +PATTERN="$(echo "$PATTERN" | sed "s/'/'\\\\''/g")" + if [ $COMPLETE_WORD = 1 ]; then CMD=$(printf "tr -cs '[:alnum:]_' '\n' | grep '^%s.' | sort -u" "$PATTERN") else - CMD=$(printf "find . ! -path '*/\.*' -a -path './%s*' | cut -b 3- | sort" "$PATTERN") + CMD=$(printf "find . ! -path '*/\.*' -a -path './%s*' 2>/dev/null | head -n $FIND_FILE_LIMIT | cut -b 3- | sort" "$PATTERN") fi -CMD=$(printf "$CMD | vis-menu -b | sed 's|^%s||' | tr -d '\n'" "$PATTERN") +PATTERN="$(echo "$PATTERN" | sed 's:/:\\/:g')" + +CMD=$(printf "$CMD | vis-menu -b | sed 's/^%s//' | tr -d '\n'" "$PATTERN") exec /bin/sh -c "$CMD" |
