aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2022-04-13 14:45:50 +0000
committerIngo Schwarze <schwarze@openbsd.org>2022-04-13 14:45:50 +0000
commit4062479d6729bdfb0de4954e7a413ca3282d17cd (patch)
tree9ef35b186e377ce875cbb2d651d6f4ee726d2fc5
parentca9bc03cff40f97d7cd61a8a1ad5f04878abee7a (diff)
downloadmandoc-4062479d6729bdfb0de4954e7a413ca3282d17cd.tar.gz
mandoc-4062479d6729bdfb0de4954e7a413ca3282d17cd.tar.zst
mandoc-4062479d6729bdfb0de4954e7a413ca3282d17cd.zip
Do not die on an assertion if an input file contains no section
whatsoever and ends with a broken next-line scope. Obviously, this cannot happen in a real manual page, but mandoc(1) should not die even when fed absurd input. This bug was independently reported by both jsg@ and tb@ who both found it with afl(1).
-rw-r--r--man_macro.c7
-rw-r--r--regress/man/TH/nobody.in5
-rw-r--r--regress/man/TH/nobody.out_ascii2
-rw-r--r--regress/man/TH/nobody.out_lint1
4 files changed, 9 insertions, 6 deletions
diff --git a/man_macro.c b/man_macro.c
index b3c3a3cb..40033a66 100644
--- a/man_macro.c
+++ b/man_macro.c
@@ -1,7 +1,7 @@
-/* $Id: man_macro.c,v 1.145 2020/09/09 17:01:10 schwarze Exp $ */
+/* $Id: man_macro.c,v 1.146 2022/04/13 14:45:50 schwarze Exp $ */
/*
+ * Copyright (c) 2012-2015,2017-2020,2022 Ingo Schwarze <schwarze@openbsd.org>
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2012-2015, 2017-2020 Ingo Schwarze <schwarze@openbsd.org>
* Copyright (c) 2013 Franco Fichtner <franco@lastsummer.de>
*
* Permission to use, copy, modify, and distribute this software for any
@@ -108,7 +108,8 @@ man_unscope(struct roff_man *man, const struct roff_node *to)
n->line, n->pos,
"EOF breaks %s", roff_name[n->tok]);
if (man->flags & MAN_ELINE) {
- if ((man_macro(n->parent->tok)->flags &
+ if (n->parent->type == ROFFT_ROOT ||
+ (man_macro(n->parent->tok)->flags &
MAN_ESCOPED) == 0)
man->flags &= ~MAN_ELINE;
} else {
diff --git a/regress/man/TH/nobody.in b/regress/man/TH/nobody.in
index b24909ad..5ef4c1d4 100644
--- a/regress/man/TH/nobody.in
+++ b/regress/man/TH/nobody.in
@@ -1,2 +1,3 @@
-.\" $OpenBSD: nobody.in,v 1.2 2017/07/04 14:53:24 schwarze Exp $
-.TH TH-NOBODY 1 "June 20, 2014"
+.\" $OpenBSD: nobody.in,v 1.3 2022/04/13 14:37:34 schwarze Exp $
+.TH TH-NOBODY 1 "April 13, 2022"
+.B
diff --git a/regress/man/TH/nobody.out_ascii b/regress/man/TH/nobody.out_ascii
index 2b0b1ed2..975e8a77 100644
--- a/regress/man/TH/nobody.out_ascii
+++ b/regress/man/TH/nobody.out_ascii
@@ -1,3 +1,3 @@
TH-NOBODY(1) General Commands Manual TH-NOBODY(1)
-OpenBSD June 20, 2014 TH-NOBODY(1)
+OpenBSD April 13, 2022 TH-NOBODY(1)
diff --git a/regress/man/TH/nobody.out_lint b/regress/man/TH/nobody.out_lint
index f5439fcd..dae5fdf0 100644
--- a/regress/man/TH/nobody.out_lint
+++ b/regress/man/TH/nobody.out_lint
@@ -1 +1,2 @@
+mandoc: nobody.in:3:2: WARNING: line scope broken: EOF breaks B
mandoc: nobody.in: WARNING: no document body