diff options
author | 2018-12-21 17:15:18 +0000 | |
---|---|---|
committer | 2018-12-21 17:15:18 +0000 | |
commit | a90a19d8ea1fd9c75174c833a56f4c68dae450c4 (patch) | |
tree | 6040fbeff2ceb01c795fcdc0bf917f24038e4b44 /libmandoc.h | |
parent | 3cfd064738dd1ac7b31bfbb5b6eab47b4ea99b2c (diff) | |
download | mandoc-a90a19d8ea1fd9c75174c833a56f4c68dae450c4.tar.gz mandoc-a90a19d8ea1fd9c75174c833a56f4c68dae450c4.tar.zst mandoc-a90a19d8ea1fd9c75174c833a56f4c68dae450c4.zip |
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 'libmandoc.h')
-rw-r--r-- | libmandoc.h | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/libmandoc.h b/libmandoc.h index d56ca1b6..ff6f4692 100644 --- a/libmandoc.h +++ b/libmandoc.h @@ -1,4 +1,4 @@ -/* $Id: libmandoc.h,v 1.76 2018/12/14 06:33:14 schwarze Exp $ */ +/* $Id: libmandoc.h,v 1.77 2018/12/21 17:15:18 schwarze Exp $ */ /* * Copyright (c) 2009, 2010, 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv> * Copyright (c) 2013,2014,2015,2017,2018 Ingo Schwarze <schwarze@openbsd.org> @@ -48,7 +48,6 @@ struct buf { struct roff; struct roff_man; -char *mandoc_getarg(char **, int, int *); char *mandoc_normdate(struct roff_man *, char *, int, int); int mandoc_eos(const char *, size_t); int mandoc_strntoi(const char *, size_t, int); @@ -76,6 +75,7 @@ void roff_endparse(struct roff *); void roff_setreg(struct roff *, const char *, int, char sign); int roff_getreg(struct roff *, const char *); char *roff_strdup(const struct roff *, const char *); +char *roff_getarg(struct roff *, char **, int, int *); int roff_getcontrol(const struct roff *, const char *, int *); int roff_getformat(const struct roff *); |