=================================================================== RCS file: /cvs/mandoc/roff.c,v retrieving revision 1.239 retrieving revision 1.242 diff -u -p -r1.239 -r1.242 --- mandoc/roff.c 2014/11/19 01:20:25 1.239 +++ mandoc/roff.c 2014/12/16 03:53:43 1.242 @@ -1,4 +1,4 @@ -/* $Id: roff.c,v 1.239 2014/11/19 01:20:25 schwarze Exp $ */ +/* $Id: roff.c,v 1.242 2014/12/16 03:53:43 schwarze Exp $ */ /* * Copyright (c) 2010, 2011, 2012 Kristaps Dzonsons * Copyright (c) 2010-2014 Ingo Schwarze @@ -1236,7 +1236,7 @@ roff_evalstrcond(const char *v, int *pos) out: if (NULL == s3) s3 = strchr(s2, '\0'); - else + else if (*s3 != '\0') s3++; *pos = s3 - v; return(match); @@ -1249,7 +1249,7 @@ out: static int roff_evalcond(struct roff *r, int ln, const char *v, int *pos) { - int wanttrue, number; + int number, savepos, wanttrue; if ('!' == v[*pos]) { wanttrue = 0; @@ -1258,6 +1258,8 @@ roff_evalcond(struct roff *r, int ln, const char *v, i wanttrue = 1; switch (v[*pos]) { + case '\0': + return(0); case 'n': /* FALLTHROUGH */ case 'o': @@ -1280,10 +1282,13 @@ roff_evalcond(struct roff *r, int ln, const char *v, i break; } + savepos = *pos; if (roff_evalnum(r, ln, v, pos, &number, 0)) return((number > 0) == wanttrue); - else + else if (*pos == savepos) return(roff_evalstrcond(v, pos) == wanttrue); + else + return (0); } static enum rofferr