From: schwarze@mandoc.bsd.lv
To: source@mandoc.bsd.lv
Subject: mandoc: When parsing a macro argument results in delayed escape sequence
Date: Sat, 21 Oct 2023 17:10:48 +0000 (UTC) [thread overview]
Message-ID: <94816b1d7a55add9@mandoc.bsd.lv> (raw)
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
reply other threads:[~2023-10-21 17:10 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=94816b1d7a55add9@mandoc.bsd.lv \
--to=schwarze@mandoc.bsd.lv \
--cc=source@mandoc.bsd.lv \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).