about summary refs log tree commit diff
path: root/Src/cond.c
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2010-02-19 12:45:35 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2010-02-19 12:45:35 +0000
commited5d0535140693dbfa3f0e6d8bf844dfc2d4943b (patch)
tree45d2421837fc771ecc43d94e637670bffbb2e096 /Src/cond.c
parentbbc88550db62ffe2cbdecd62c21252a941f8db36 (diff)
downloadzsh-ed5d0535140693dbfa3f0e6d8bf844dfc2d4943b.tar.gz
zsh-ed5d0535140693dbfa3f0e6d8bf844dfc2d4943b.tar.xz
zsh-ed5d0535140693dbfa3f0e6d8bf844dfc2d4943b.zip
27722: bad error reporting and checking in conditions
Diffstat (limited to 'Src/cond.c')
-rw-r--r--Src/cond.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/Src/cond.c b/Src/cond.c
index 2d073fc46..b911bfb33 100644
--- a/Src/cond.c
+++ b/Src/cond.c
@@ -104,7 +104,7 @@ evalcond(Estate state, char *fromtest)
     case COND_MODI:
 	{
 	    Conddef cd;
-	    char *name = overridename;
+	    char *name = overridename, *errname;
 	    char **strs;
 	    int l = WC_COND_SKIP(code);
 
@@ -122,10 +122,17 @@ evalcond(Estate state, char *fromtest)
 		strs = arrdup(sbuf);
 		l = 2;
 	    }
-	    if ((cd = getconddef((ctype == COND_MODI), name + 1, 1))) {
+	    if (name && name[0] == '-')
+		errname = name;
+	    else if (strs[0] && *strs[0] == '-')
+		errname = strs[0];
+	    else
+		errname = "<null>";
+	    if (name && name[0] == '-' &&
+		(cd = getconddef((ctype == COND_MODI), name + 1, 1))) {
 		if (ctype == COND_MOD &&
 		    (l < cd->min || (cd->max >= 0 && l > cd->max))) {
-		    zwarnnam(fromtest, "unknown condition: -%s", name);
+		    zwarnnam(fromtest, "unknown condition: %s", name);
 		    return 2;
 		}
 		if (tracingcond)
@@ -151,8 +158,8 @@ evalcond(Estate state, char *fromtest)
 		if (name && name[0] == '-' &&
 		    (cd = getconddef(0, name + 1, 1))) {
 		    if (l < cd->min || (cd->max >= 0 && l > cd->max)) {
-			zwarnnam(fromtest, "unknown condition: -%s",
-				 name);
+			zwarnnam(fromtest, "unknown condition: %s",
+				 errname);
 			return 2;
 		    }
 		    if (tracingcond)
@@ -160,8 +167,8 @@ evalcond(Estate state, char *fromtest)
 		    return !cd->handler(strs, cd->condid);
 		} else {
 		    zwarnnam(fromtest,
-			     "unknown condition: -%s",
-			     name ? name : "<null>");
+			     "unknown condition: %s",
+			     errname);
 		}
 	    }
 	    /* module not found, error */