=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/mandoc/man_macro.c,v retrieving revision 1.98 retrieving revision 1.99 diff -u -r1.98 -r1.99 --- src/usr.bin/mandoc/man_macro.c 2018/12/14 06:33:03 1.98 +++ src/usr.bin/mandoc/man_macro.c 2018/12/21 16:58:49 1.99 @@ -1,4 +1,4 @@ -/* $OpenBSD: man_macro.c,v 1.98 2018/12/14 06:33:03 schwarze Exp $ */ +/* $OpenBSD: man_macro.c,v 1.99 2018/12/21 16:58:49 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons * Copyright (c) 2012-2015, 2017, 2018 Ingo Schwarze @@ -200,22 +200,25 @@ { enum roff_tok ctok, ntok; const struct roff_node *nn; - char *p; - int cline, cpos, nrew, target; + char *p, *ep; + int cline, cpos, la, nrew, target; nrew = 1; switch (tok) { case MAN_RE: ntok = MAN_RS; + la = *pos; if ( ! man_args(man, line, pos, buf, &p)) break; for (nn = man->last->parent; nn; nn = nn->parent) if (nn->tok == ntok && nn->type == ROFFT_BLOCK) nrew++; - target = strtol(p, &p, 10); - if (*p != '\0') + target = strtol(p, &ep, 10); + if (*ep != '\0') mandoc_msg(MANDOCERR_ARG_EXCESS, line, - (int)(p - buf), "RE ... %s", p); + la + (buf[la] == '"') + (int)(ep - p), + "RE ... %s", ep); + free(p); if (target == 0) target = 1; nrew -= target; @@ -310,6 +313,7 @@ roff_setreg(man->roff, "an-margin", head->aux, '+'); } + free(p); } if (buf[*pos] != '\0') @@ -346,6 +350,7 @@ if ( ! man_args(man, line, pos, buf, &p)) break; roff_word_alloc(man, line, la, p); + free(p); } /* @@ -395,6 +400,7 @@ roff_word_append(man, p); else roff_word_alloc(man, line, la, p); + free(p); } /* @@ -454,6 +460,6 @@ if ('\0' == *start) return 0; - *v = mandoc_getarg(v, line, pos); + *v = roff_getarg(man->roff, v, line, pos); return 1; }