diff options
| author | Ingo Schwarze <schwarze@openbsd.org> | 2022-04-13 14:45:50 +0000 |
|---|---|---|
| committer | Ingo Schwarze <schwarze@openbsd.org> | 2022-04-13 14:45:50 +0000 |
| commit | 4062479d6729bdfb0de4954e7a413ca3282d17cd (patch) | |
| tree | 9ef35b186e377ce875cbb2d651d6f4ee726d2fc5 /man_macro.c | |
| parent | ca9bc03cff40f97d7cd61a8a1ad5f04878abee7a (diff) | |
| download | mandoc-4062479d6729bdfb0de4954e7a413ca3282d17cd.tar.gz 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).
Diffstat (limited to 'man_macro.c')
| -rw-r--r-- | man_macro.c | 7 |
1 files changed, 4 insertions, 3 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 { |
