diff options
author | Ingo Schwarze <schwarze@cvs.openbsd.org> | 2018-12-21 16:58:50 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@cvs.openbsd.org> | 2018-12-21 16:58:50 +0000 |
commit | 7928109223463f24bfe9976dc7a663ec40d4f32f (patch) | |
tree | 6973d5b6b42df71093cd3b7fb8c0cc65af9c1045 /usr.bin/mandoc/libmdoc.h | |
parent | 69025f72dda5ad51f12ce2e464aa69ff47385c5f (diff) |
Rename mandoc_getarg() to roff_getarg() and pass it the roff parser
struct as an argument such that after copy-in, it can call roff_expand()
once again, which used to be called roff_res() before this. This
fixes a subtle low-level roff(7) parsing bug reported by Fabio
Scotoni <fabio at esse dot ch> in the 4.4BSD-Lite2 mdoc.samples(7)
manual page, because that page used an escaped escape sequence in
a macro argument.
To expand escaped escape sequences in quoted mdoc(7) arguments, too,
stop bypassing the call to roff_getarg() in mdoc_argv.c, function args()
for this case. This does not solve the case of escaped escape sequences
in quoted .Bl -column phrases yet.
Because roff_expand() can make the string longer, roff_getarg() can no
longer operate in-place but needs to malloc(3) the returned string.
In the high-level parsers, free(3) that string after processing it.
Diffstat (limited to 'usr.bin/mandoc/libmdoc.h')
-rw-r--r-- | usr.bin/mandoc/libmdoc.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/usr.bin/mandoc/libmdoc.h b/usr.bin/mandoc/libmdoc.h index f9639a992fd..6eab77501d4 100644 --- a/usr.bin/mandoc/libmdoc.h +++ b/usr.bin/mandoc/libmdoc.h @@ -1,4 +1,4 @@ -/* $OpenBSD: libmdoc.h,v 1.85 2018/12/04 02:53:45 schwarze Exp $ */ +/* $OpenBSD: libmdoc.h,v 1.86 2018/12/21 16:58:49 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> * Copyright (c) 2013,2014,2015,2017,2018 Ingo Schwarze <schwarze@openbsd.org> @@ -38,6 +38,7 @@ enum margserr { ARGS_ERROR, ARGS_EOLN, /* end-of-line */ ARGS_WORD, /* normal word */ + ARGS_ALLOC, /* normal word from roff_getarg() */ ARGS_PUNCT, /* series of punctuation */ ARGS_PHRASE /* Bl -column phrase */ }; |