aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2014-12-22 23:27:32 +0000
committerIngo Schwarze <schwarze@openbsd.org>2014-12-22 23:27:32 +0000
commitac671c2417036c0616543e9cc860ffd3baeea9ae (patch)
tree93a9c61e0552e5811425282b375efcbe73d44002
parent18c016fc3808867de2d3800f95abee7d75e409df (diff)
downloadmandoc-ac671c2417036c0616543e9cc860ffd3baeea9ae.tar.gz
mandoc-ac671c2417036c0616543e9cc860ffd3baeea9ae.tar.zst
mandoc-ac671c2417036c0616543e9cc860ffd3baeea9ae.zip
The code already pays attention not to close the same block twice.
Similarly, avoid having the same block break two other blocks. In some situations, this could lead to an endless loop in rew_sub() found by jsg@ with afl. Minimal example: .Po Ao Pc Bo Pc Ac Bc
-rw-r--r--mdoc_macro.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/mdoc_macro.c b/mdoc_macro.c
index 92de5912..56ae7983 100644
--- a/mdoc_macro.c
+++ b/mdoc_macro.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc_macro.c,v 1.160 2014/12/20 02:26:57 schwarze Exp $ */
+/* $Id: mdoc_macro.c,v 1.161 2014/12/22 23:27:32 schwarze Exp $ */
/*
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010, 2012, 2013, 2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -363,7 +363,7 @@ rew_dohalt(enum mdoct tok, enum mdoc_type type,
* When starting to rewind, skip plain text
* and nodes that have already been rewound.
*/
- if (MDOC_TEXT == p->type || MDOC_VALID & p->flags)
+ if (p->type == MDOC_TEXT || p->flags & (MDOC_VALID | MDOC_BREAK))
return(REWIND_MORE);
/*
@@ -746,7 +746,7 @@ blk_exp_close(MACRO_PROT_ARGS)
atok = rew_alt(tok);
body = endbody = later = NULL;
for (n = mdoc->last; n; n = n->parent) {
- if (n->flags & MDOC_VALID)
+ if (n->flags & (MDOC_VALID | MDOC_BREAK))
continue;
/* Remember the start of our own body. */