From ed5d0535140693dbfa3f0e6d8bf844dfc2d4943b Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Fri, 19 Feb 2010 12:45:35 +0000 Subject: 27722: bad error reporting and checking in conditions --- Src/cond.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'Src') 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 = ""; + 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 : ""); + "unknown condition: %s", + errname); } } /* module not found, error */ -- cgit 1.4.1