aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2016-08-11 10:47:16 +0000
committerIngo Schwarze <schwarze@openbsd.org>2016-08-11 10:47:16 +0000
commit5d3f9b6b553822174198a1985aa3bd2802f51747 (patch)
treee66bfa691f60d79932d118fe05321cd8bbcccf67
parentea968bc9dd55733b728f8cdfe266ee97c4fd2813 (diff)
downloadmandoc-5d3f9b6b553822174198a1985aa3bd2802f51747.tar.gz
mandoc-5d3f9b6b553822174198a1985aa3bd2802f51747.tar.zst
mandoc-5d3f9b6b553822174198a1985aa3bd2802f51747.zip
If a .Bd display is on the one hand doomed to be deleted because
it has no type, but is on the other hand breaking another block, delete its end marker as well, or the end marker may remain behind as an orphan, triggering an assertion in the terminal formatter. Problem found by tb@ with afl(1).
-rw-r--r--mdoc_validate.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/mdoc_validate.c b/mdoc_validate.c
index 832832fb..bc8b93bf 100644
--- a/mdoc_validate.c
+++ b/mdoc_validate.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc_validate.c,v 1.305 2016/08/10 20:17:50 schwarze Exp $ */
+/* $Id: mdoc_validate.c,v 1.306 2016/08/11 10:47:16 schwarze Exp $ */
/*
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2016 Ingo Schwarze <schwarze@openbsd.org>
@@ -886,9 +886,10 @@ post_display(POST_ARGS)
n = mdoc->last;
switch (n->type) {
case ROFFT_BODY:
- if (n->end != ENDBODY_NOT)
- break;
- if (n->child == NULL)
+ if (n->end != ENDBODY_NOT) {
+ if (n->tok == MDOC_Bd && n->parent->args == NULL)
+ roff_node_delete(mdoc, n);
+ } else if (n->child == NULL)
mandoc_msg(MANDOCERR_BLK_EMPTY, mdoc->parse,
n->line, n->pos, mdoc_macronames[n->tok]);
else if (n->tok == MDOC_D1)