]> git.cameronkatri.com Git - mandoc.git/commitdiff
Recognize .Bl -column at parse time, and not only at validation time,
authorIngo Schwarze <schwarze@openbsd.org>
Wed, 29 Nov 2017 20:05:33 +0000 (20:05 +0000)
committerIngo Schwarze <schwarze@openbsd.org>
Wed, 29 Nov 2017 20:05:33 +0000 (20:05 +0000)
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@.

mdoc_state.c

index d9cad18b1052d0f6fac82261a5a01ad337d732ce..2d8563f5bf162950470e514072b4d520d0023223 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mdoc_state.c,v 1.8 2017/05/05 15:17:32 schwarze Exp $ */
+/*     $Id: mdoc_state.c,v 1.9 2017/11/29 20:05:33 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;
+               }
        }
 }