=================================================================== RCS file: /cvs/texi2mdoc/main.c,v retrieving revision 1.69 retrieving revision 1.70 diff -u -p -r1.69 -r1.70 --- texi2mdoc/main.c 2015/03/13 08:07:33 1.69 +++ texi2mdoc/main.c 2015/03/13 08:13:21 1.70 @@ -1,4 +1,4 @@ -/* $Id: main.c,v 1.69 2015/03/13 08:07:33 kristaps Exp $ */ +/* $Id: main.c,v 1.70 2015/03/13 08:13:21 kristaps Exp $ */ /* * Copyright (c) 2015 Kristaps Dzonsons * @@ -1516,12 +1516,16 @@ indexcmp(const void *p1, const void *p2) static void doprintindex(struct texi *p, enum texicmd cmd, size_t *pos) { - size_t i, j, start, end, len; + static size_t guard = 0; + size_t i, j, start, end, len; #if HAVE_INDEX - char *cp; - char buf[PATH_MAX]; + char *cp; + char buf[PATH_MAX]; #endif + if (guard++ > 8) + texierr(p, "recursive @printindex"); + while (*pos < BUFSZ(p) && isws(BUF(p)[*pos])) advance(p, pos); start = *pos; @@ -1529,15 +1533,18 @@ doprintindex(struct texi *p, enum texicmd cmd, size_t advance(p, pos); if ((end = *pos) == BUFSZ(p)) { texiwarn(p, "unexpected EOF"); + guard--; return; } advance(p, pos); if (*pos == BUFSZ(p)) { texiwarn(p, "unexpected EOF"); + guard--; return; } else if (0 == (len = end - start)) { texiwarn(p, "zero-length index"); + guard--; return; } @@ -1552,9 +1559,12 @@ doprintindex(struct texi *p, enum texicmd cmd, size_t if (i == p->indexsz) { texiwarn(p, "cannot find index"); + guard--; return; - } else if (0 == p->indexs[i].indexsz) + } else if (0 == p->indexs[i].indexsz) { + guard--; return; + } /* Alphabetically sort our indices. */ qsort(p->indexs[i].index, @@ -1601,6 +1611,7 @@ doprintindex(struct texi *p, enum texicmd cmd, size_t p->seenvs = 0; teximacro(p, "El"); texivspace(p); + guard--; } static void