From 6369db7023f81f1bf5ae71175457e3e9c7b146f3 Mon Sep 17 00:00:00 2001 From: schwarze Date: Wed, 13 Apr 2022 14:37:34 +0000 Subject: [PATCH] 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). --- regress/usr.bin/mandoc/man/TH/nobody.in | 5 +++-- regress/usr.bin/mandoc/man/TH/nobody.out_ascii | 2 +- regress/usr.bin/mandoc/man/TH/nobody.out_lint | 1 + usr.bin/mandoc/man_macro.c | 7 ++++--- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/regress/usr.bin/mandoc/man/TH/nobody.in b/regress/usr.bin/mandoc/man/TH/nobody.in index b24909ad661..5ef4c1d46ad 100644 --- a/regress/usr.bin/mandoc/man/TH/nobody.in +++ b/regress/usr.bin/mandoc/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/usr.bin/mandoc/man/TH/nobody.out_ascii b/regress/usr.bin/mandoc/man/TH/nobody.out_ascii index 2b0b1ed2325..975e8a777dc 100644 --- a/regress/usr.bin/mandoc/man/TH/nobody.out_ascii +++ b/regress/usr.bin/mandoc/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/usr.bin/mandoc/man/TH/nobody.out_lint b/regress/usr.bin/mandoc/man/TH/nobody.out_lint index f5439fcdc56..dae5fdf0cf2 100644 --- a/regress/usr.bin/mandoc/man/TH/nobody.out_lint +++ b/regress/usr.bin/mandoc/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 diff --git a/usr.bin/mandoc/man_macro.c b/usr.bin/mandoc/man_macro.c index dc3832d1039..779b28278fe 100644 --- a/usr.bin/mandoc/man_macro.c +++ b/usr.bin/mandoc/man_macro.c @@ -1,7 +1,7 @@ -/* $OpenBSD: man_macro.c,v 1.107 2020/09/09 16:57:05 schwarze Exp $ */ +/* $OpenBSD: man_macro.c,v 1.108 2022/04/13 14:37:34 schwarze Exp $ */ /* + * Copyright (c) 2012-2015,2017-2020,2022 Ingo Schwarze * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons - * Copyright (c) 2012-2015, 2017-2020 Ingo Schwarze * Copyright (c) 2013 Franco Fichtner * * Permission to use, copy, modify, and distribute this software for any @@ -106,7 +106,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 { -- 2.20.1