From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from krisdoz.my.domain (schwarze@localhost [127.0.0.1]) by krisdoz.my.domain (8.14.5/8.14.5) with ESMTP id s27Ibbj7007526 for ; Fri, 7 Mar 2014 13:37:37 -0500 (EST) Received: (from schwarze@localhost) by krisdoz.my.domain (8.14.5/8.14.3/Submit) id s27Ibb7W007625; Fri, 7 Mar 2014 13:37:37 -0500 (EST) Date: Fri, 7 Mar 2014 13:37:37 -0500 (EST) Message-Id: <201403071837.s27Ibb7W007625@krisdoz.my.domain> X-Mailinglist: mdocml-source Reply-To: source@mdocml.bsd.lv MIME-Version: 1.0 From: schwarze@mdocml.bsd.lv To: source@mdocml.bsd.lv Subject: mdocml: In roff_cond_sub(), make sure that the incorrect input sequence X-Mailer: activitymail 1.26, http://search.cpan.org/dist/activitymail/ Content-Type: text/plain; charset=utf-8 Log Message: ----------- In roff_cond_sub(), make sure that the incorrect input sequence `\\}', when found on a macro line, does not close a conditional block. The companion function roff_cond_text() already did this correctly, but make the code more readable without functional change. While here, report the correct column number in related error messages. Modified Files: -------------- mdocml: roff.c Revision Data ------------- Index: roff.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/roff.c,v retrieving revision 1.196 retrieving revision 1.197 diff -Lroff.c -Lroff.c -u -p -r1.196 -r1.197 --- roff.c +++ roff.c @@ -1082,10 +1082,11 @@ roff_cond_sub(ROFF_ARGS) /* Always check for the closing delimiter `\}'. */ while (NULL != (ep = strchr(ep, '\\'))) { - if ('}' != *(++ep)) - continue; - *ep = '&'; - roff_ccond(r, ln, pos); + if ('}' == *(++ep)) { + *ep = '&'; + roff_ccond(r, ln, ep - *bufp - 1); + } + ++ep; } return(ROFFRULE_DENY == rr ? ROFF_IGN : ROFF_CONT); } @@ -1100,13 +1101,13 @@ roff_cond_text(ROFF_ARGS) rr = r->last->rule; roffnode_cleanscope(r); - ep = &(*bufp)[pos]; - for ( ; NULL != (ep = strchr(ep, '\\')); ep++) { - ep++; - if ('}' != *ep) - continue; - *ep = '&'; - roff_ccond(r, ln, pos); + ep = *bufp + pos; + while (NULL != (ep = strchr(ep, '\\'))) { + if ('}' == *(++ep)) { + *ep = '&'; + roff_ccond(r, ln, ep - *bufp - 1); + } + ++ep; } return(ROFFRULE_DENY == rr ? ROFF_IGN : ROFF_CONT); } -- To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv