summary refs log tree commit diff
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.tar.xz
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.