summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2017-11-29 20:05:33 +0000
committerIngo Schwarze <schwarze@openbsd.org>2017-11-29 20:05:33 +0000
commit81d05af23d7b7c63bde7a7c646dc791463d93873 (patch)
treec9f2e2ac38c890afb27fea491f571ba3ae86de33
parentbe563e9fe69c9469046c12e49f78e6f8ca4d318e (diff)
downloadmandoc-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.c23
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;
+ }
}
}