summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBart Schaefer <barts@users.sourceforge.net>2000-07-02 17:21:54 +0000
committerBart Schaefer <barts@users.sourceforge.net>2000-07-02 17:21:54 +0000
commit4ed8c26c50dea84a01903e6d80b68701d9c4f3c0 (patch)
treec35b85c5cf130f31c96cb8d33191ddbe5f696ade
parent0f398e9d2fd4f653cf24456bf4fbb4ce277f98e7 (diff)
downloadzsh-4ed8c26c50dea84a01903e6d80b68701d9c4f3c0.tar.gz
zsh-4ed8c26c50dea84a01903e6d80b68701d9c4f3c0.zip
12133: Protect completion system from stray error output and assorted fatal
errors when expanding strings taken from the command line.
-rw-r--r--ChangeLog7
-rw-r--r--Completion/Core/_expand4
-rw-r--r--Completion/Core/_path_files2
3 files changed, 10 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 5276d12f0..81a1d3a7d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2000-07-02 Bart Schaefer <schaefer@zsh.org>
+
+ * 12133: Completion/Core/_expand, Completion/Core/_path_files:
+ Discard error output from parameter expansions and use "eval" to
+ protect the completion system from parse errors and other garbage
+ in the strings taken from the command line.
+
2000-06-29 Sven Wischnowsky <wischnow@zsh.org>
* 12125: Src/parse.c, Test/09funcdef.ztst: fix for `foo () print
diff --git a/Completion/Core/_expand b/Completion/Core/_expand
index 77d9c8794..5ac196428 100644
--- a/Completion/Core/_expand
+++ b/Completion/Core/_expand
@@ -63,7 +63,7 @@ if [[ "$force" = *s* ]] ||
eval exp\=\( ${${(q)exp}:gs/\\{/\{/:gs/\\}/\}/} \)
exp=( ${${(e)exp//\\[
]/ }//(#b)([
-])/\\$match[1]} )
+])/\\$match[1]} ) 2>/dev/null
else
exp=( ${exp:s/\\\$/\$} )
fi
@@ -77,7 +77,7 @@ subd=("$exp[@]")
# Now try globbing.
[[ "$force" = *g* ]] || zstyle -T ":completion:${curcontext}:" glob &&
- exp=( ${~exp} )
+ eval 'exp=( ${~exp} )' 2>/dev/null
# If we don't have any expansions or only one and that is the same
# as the original string, we let other completers run.
diff --git a/Completion/Core/_path_files b/Completion/Core/_path_files
index 250f6c750..df7f50d8a 100644
--- a/Completion/Core/_path_files
+++ b/Completion/Core/_path_files
@@ -322,7 +322,7 @@ for prepath in "$prepaths[@]"; do
else
compfiles -p$cfopt tmp1 accex "$skipped" "$_matcher" '' fake "$pats[@]"
fi
- tmp1=( $~tmp1 )
+ eval 'tmp1=( $~tmp1 )' 2>/dev/null
if [[ -n "$PREFIX$SUFFIX" ]]; then
# See which of them match what's on the line.