diff options
author | Peter Stephenson <pws@users.sourceforge.net> | 2010-02-19 12:45:35 +0000 |
---|---|---|
committer | Peter Stephenson <pws@users.sourceforge.net> | 2010-02-19 12:45:35 +0000 |
commit | ed5d0535140693dbfa3f0e6d8bf844dfc2d4943b (patch) | |
tree | 45d2421837fc771ecc43d94e637670bffbb2e096 /Src | |
parent | bbc88550db62ffe2cbdecd62c21252a941f8db36 (diff) | |
download | zsh-ed5d0535140693dbfa3f0e6d8bf844dfc2d4943b.tar.gz zsh-ed5d0535140693dbfa3f0e6d8bf844dfc2d4943b.tar.xz zsh-ed5d0535140693dbfa3f0e6d8bf844dfc2d4943b.zip |
27722: bad error reporting and checking in conditions
Diffstat (limited to 'Src')
-rw-r--r-- | Src/cond.c | 21 |
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 */ |