=================================================================== RCS file: /cvs/mandoc/Attic/mdocterm.c,v retrieving revision 1.35 retrieving revision 1.37 diff -u -p -r1.35 -r1.37 --- mandoc/Attic/mdocterm.c 2009/03/08 13:52:29 1.35 +++ mandoc/Attic/mdocterm.c 2009/03/09 13:17:49 1.37 @@ -1,4 +1,4 @@ -/* $Id: mdocterm.c,v 1.35 2009/03/08 13:52:29 kristaps Exp $ */ +/* $Id: mdocterm.c,v 1.37 2009/03/09 13:17:49 kristaps Exp $ */ /* * Copyright (c) 2008 Kristaps Dzonsons * @@ -16,6 +16,8 @@ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ +#include + #include #include #include @@ -23,9 +25,6 @@ #include #include #include -#ifndef __OpenBSD__ -#include -#endif #include "mmain.h" #include "term.h" @@ -681,24 +680,34 @@ pescape(struct termp *p, const char *word, size_t *i, { size_t j; - (*i)++; - assert(*i < len); + if (++(*i) >= len) { + warnx("ignoring bad escape sequence"); + return; + } if ('(' == word[*i]) { (*i)++; - assert(*i + 1 < len); + if (*i + 1 >= len) { + warnx("ignoring bad escape sequence"); + return; + } nescape(p, &word[*i], 2); (*i)++; return; } else if ('*' == word[*i]) { - /* XXX - deprecated! */ (*i)++; - assert(*i < len); + if (*i >= len) { + warnx("ignoring bad escape sequence"); + return; + } switch (word[*i]) { case ('('): (*i)++; - assert(*i + 1 < len); + if (*i + 1 >= len) { + warnx("ignoring bad escape sequence"); + return; + } nescape(p, &word[*i], 2); (*i)++; return; @@ -718,7 +727,10 @@ pescape(struct termp *p, const char *word, size_t *i, for (j = 0; word[*i] && ']' != word[*i]; (*i)++, j++) /* Loop... */ ; - assert(word[*i]); + if (0 == word[*i]) { + warnx("ignoring bad escape sequence"); + return; + } nescape(p, &word[*i - j], j); }