diff options
author | Ingo Schwarze <schwarze@cvs.openbsd.org> | 2017-11-29 20:04:37 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@cvs.openbsd.org> | 2017-11-29 20:04:37 +0000 |
commit | 395c88f9b500f4ff4e1b1a71917bfbe5914e9828 (patch) | |
tree | c1b74f1061453acc1a089e3d6020f80206952994 | |
parent | 2bee4fdd4cab756be6c0a5119906f1c116df7824 (diff) |
Recognize .Bl -column at parse time, and not only at validation time,
even if other arguments precede -column. This is required because
the .It parser needs to know whether or not we are a -column list.
Fixes tree corruption leading to an assertion failure.
Bug reported by bentley@.
-rw-r--r-- | usr.bin/mandoc/mdoc_state.c | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/usr.bin/mandoc/mdoc_state.c b/usr.bin/mandoc/mdoc_state.c index 1d364c72179..df4e367e3ca 100644 --- a/usr.bin/mandoc/mdoc_state.c +++ b/usr.bin/mandoc/mdoc_state.c @@ -1,4 +1,4 @@ -/* $OpenBSD: mdoc_state.c,v 1.8 2017/05/05 15:16:25 schwarze Exp $ */ +/* $OpenBSD: mdoc_state.c,v 1.9 2017/11/29 20:04:36 schwarze Exp $ */ /* * Copyright (c) 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org> * @@ -208,19 +208,24 @@ state_bd(STATE_ARGS) static void state_bl(STATE_ARGS) { + struct mdoc_arg *args; + size_t i; if (n->type != ROFFT_HEAD || n->parent->args == NULL) return; - switch(n->parent->args->argv[0].arg) { - case MDOC_Diag: - n->norm->Bl.type = LIST_diag; - break; - case MDOC_Column: - n->norm->Bl.type = LIST_column; - break; - default: - break; + args = n->parent->args; + for (i = 0; i < args->argc; i++) { + switch(args->argv[i].arg) { + case MDOC_Diag: + n->norm->Bl.type = LIST_diag; + return; + case MDOC_Column: + n->norm->Bl.type = LIST_column; + return; + default: + break; + } } } |