diff options
author | Ingo Schwarze <schwarze@openbsd.org> | 2017-11-29 20:05:33 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@openbsd.org> | 2017-11-29 20:05:33 +0000 |
commit | 81d05af23d7b7c63bde7a7c646dc791463d93873 (patch) | |
tree | c9f2e2ac38c890afb27fea491f571ba3ae86de33 | |
parent | be563e9fe69c9469046c12e49f78e6f8ca4d318e (diff) | |
download | mandoc-81d05af23d7b7c63bde7a7c646dc791463d93873.tar.gz |
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-- | mdoc_state.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/mdoc_state.c b/mdoc_state.c index ecf06201..d5428e2f 100644 --- a/mdoc_state.c +++ b/mdoc_state.c @@ -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; + } } } |