Don't let .Ta creep into an already-closed list; same as for .It.
authorschwarze <schwarze@openbsd.org>
Thu, 18 Dec 2014 20:58:00 +0000 (20:58 +0000)
committerschwarze <schwarze@openbsd.org>
Thu, 18 Dec 2014 20:58:00 +0000 (20:58 +0000)
Fixes an assertion found by jsg@ with afl.

regress/usr.bin/mandoc/mdoc/Bl/bareTa.in
regress/usr.bin/mandoc/mdoc/Bl/bareTa.out_ascii
regress/usr.bin/mandoc/mdoc/Bl/bareTa.out_lint
usr.bin/mandoc/mdoc_macro.c

index 20f0037..12eaf45 100644 (file)
@@ -18,4 +18,9 @@ middle text
 .It Ta ignored arguments
 indented text
 .El
+middle text
+.Bl -column "a" "b" -offset indent
+.It a Ta b
+.El
+.It ignored arguments
 final text
index d1378e0..831ffee 100644 (file)
@@ -10,6 +10,9 @@ D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
      middle text
 
      -\b-   indented text
+     middle text
+
+           a    b
      final text
 
 OpenBSD                        November 12, 2012                       OpenBSD
index e663e42..141e1bd 100644 (file)
@@ -2,3 +2,4 @@ mandoc: bareTa.in:9:2: ERROR: skipping column outside column list: Ta
 mandoc: bareTa.in:13:2: ERROR: skipping column outside column list: Ta
 mandoc: bareTa.in:18:5: ERROR: skipping column outside column list: Ta
 mandoc: bareTa.in:18:2: ERROR: skipping all arguments: It ignored arguments
+mandoc: bareTa.in:25:2: ERROR: skipping item outside list: It ignored arguments
index 3dbd660..eb4fa30 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: mdoc_macro.c,v 1.114 2014/12/18 03:09:42 schwarze Exp $ */
+/*     $OpenBSD: mdoc_macro.c,v 1.115 2014/12/18 20:58:00 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010, 2012, 2013, 2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -1557,7 +1557,8 @@ phrase_ta(MACRO_PROT_ARGS)
        /* Make sure we are in a column list or ignore this macro. */
 
        n = mdoc->last;
-       while (n != NULL && n->tok != MDOC_Bl)
+       while (n != NULL &&
+           (n->tok != MDOC_Bl || n->flags & (MDOC_VALID | MDOC_BREAK)))
                n = n->parent;
        if (n == NULL || n->norm->Bl.type != LIST_column) {
                mandoc_msg(MANDOCERR_TA_STRAY, mdoc->parse,