=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/mandoc/roff.c,v retrieving revision 1.124 retrieving revision 1.125 diff -c -r1.124 -r1.125 *** src/usr.bin/mandoc/roff.c 2015/01/21 02:16:11 1.124 --- src/usr.bin/mandoc/roff.c 2015/01/22 22:50:31 1.125 *************** *** 1,4 **** ! /* $OpenBSD: roff.c,v 1.124 2015/01/21 02:16:11 schwarze Exp $ */ /* * Copyright (c) 2010, 2011, 2012, 2014 Kristaps Dzonsons * Copyright (c) 2010-2015 Ingo Schwarze --- 1,4 ---- ! /* $OpenBSD: roff.c,v 1.125 2015/01/22 22:50:31 schwarze Exp $ */ /* * Copyright (c) 2010, 2011, 2012, 2014 Kristaps Dzonsons * Copyright (c) 2010-2015 Ingo Schwarze *************** *** 1002,1009 **** /* Advance to the end of the name. */ arg_complete = 1; ! for (naml = 0; maxl == 0 || naml < maxl; naml++, cp++) { if (*cp == '\0') { mandoc_msg(MANDOCERR_ESC_BAD, r->parse, ln, (int)(stesc - buf->buf), stesc); --- 1002,1010 ---- /* Advance to the end of the name. */ + naml = 0; arg_complete = 1; ! while (maxl == 0 || naml < maxl) { if (*cp == '\0') { mandoc_msg(MANDOCERR_ESC_BAD, r->parse, ln, (int)(stesc - buf->buf), stesc); *************** *** 1012,1017 **** --- 1013,1035 ---- } if (maxl == 0 && *cp == term) { cp++; + break; + } + if (*cp++ != '\\' || stesc[1] != 'w') { + naml++; + continue; + } + switch (mandoc_escape(&cp, NULL, NULL)) { + case ESCAPE_SPECIAL: + /* FALLTHROUGH */ + case ESCAPE_UNICODE: + /* FALLTHROUGH */ + case ESCAPE_NUMBERED: + /* FALLTHROUGH */ + case ESCAPE_OVERSTRIKE: + naml++; + break; + default: break; } }