* mandoc: When parsing a macro argument results in delayed escape sequence
@ 2023-10-21 17:10 schwarze
0 siblings, 0 replies; only message in thread
From: schwarze @ 2023-10-21 17:10 UTC (permalink / raw)
To: source
Log Message:
-----------
When parsing a macro argument results in delayed escape sequence
expansion, re-check for all contained escape sequences whether they
need delayed expansion, not just for the particular escape sequences
that triggered delayed expansion in the first place. This is needed
because delayed expansion can result in strings containing nested
escape sequences recursively needing delayed expansion, too.
This fixes an assertion failure in krb5_openlog(3), see:
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=266882
Thanks to Wolfram Schneider <wosch at FreeBSD> for reporting the bug
and to Baptiste Daroussin <bapt at FreeBSD> for forwarding the report.
Modified Files:
--------------
mandoc:
mandoc.h
roff.c
Revision Data
-------------
Index: mandoc.h
===================================================================
RCS file: /home/cvs/mandoc/mandoc/mandoc.h,v
retrieving revision 1.281
retrieving revision 1.282
diff -Lmandoc.h -Lmandoc.h -u -p -r1.281 -r1.282
--- mandoc.h
+++ mandoc.h
@@ -23,7 +23,6 @@
#define ASCII_NBRZW 30 /* non-breaking zero-width space */
#define ASCII_BREAK 29 /* breakable zero-width space */
#define ASCII_HYPH 28 /* breakable hyphen */
-#define ASCII_ESC 27 /* escape sequence from copy-in processing */
#define ASCII_TABREF 26 /* reset tab reference position */
/*
Index: roff.c
===================================================================
RCS file: /home/cvs/mandoc/mandoc/roff.c,v
retrieving revision 1.396
retrieving revision 1.397
diff -Lroff.c -Lroff.c -u -p -r1.396 -r1.397
--- roff.c
+++ roff.c
@@ -1387,7 +1387,7 @@ roff_expand(struct roff *r, struct buf *
*/
if (buf->buf[pos] != ec) {
- if (ec != ASCII_ESC && buf->buf[pos] == '\\') {
+ if (buf->buf[pos] == '\\') {
roff_expand_patch(buf, pos, "\\e", pos + 1);
pos++;
}
@@ -1632,12 +1632,7 @@ roff_getarg(struct roff *r, char **cpp,
cp++;
break;
case '\\':
- /*
- * Signal to roff_expand() that an escape
- * sequence resulted from copy-in processing
- * and needs to be checked or interpolated.
- */
- cp[-pairs] = ASCII_ESC;
+ cp[-pairs] = '\\';
newesc = 1;
pairs++;
cp++;
@@ -1694,7 +1689,7 @@ roff_getarg(struct roff *r, char **cpp,
buf.buf = start;
buf.sz = strlen(start) + 1;
buf.next = NULL;
- if (roff_expand(r, &buf, ln, 0, ASCII_ESC) & ROFF_IGN) {
+ if (roff_expand(r, &buf, ln, 0, '\\') & ROFF_IGN) {
free(buf.buf);
buf.buf = mandoc_strdup("");
}
--
To unsubscribe send an email to source+unsubscribe@mandoc.bsd.lv
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2023-10-21 17:10 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-10-21 17:10 mandoc: When parsing a macro argument results in delayed escape sequence schwarze
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).