When scanning upwards for a column list to put a .Ta macro in,
authorschwarze <schwarze@openbsd.org>
Sat, 20 Aug 2016 15:58:16 +0000 (15:58 +0000)
committerschwarze <schwarze@openbsd.org>
Sat, 20 Aug 2016 15:58:16 +0000 (15:58 +0000)
ignore body end markers of lists breaking other blocks.
Fixing a logical error that caused a NULL deref found by tb@ with afl(1).

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

index 03a8536..3246fdc 100644 (file)
@@ -1,4 +1,4 @@
-.Dd December 18, 2014
+.Dd August 20, 2016
 .Dt BL-BREAK 1
 .Os OpenBSD
 .Sh NAME
@@ -55,6 +55,16 @@ first line after table
 second line after table
 .El
 after list
+.Sh DIAGNOSTICS
+.Bl -column column
+.It column
+.Bd -ragged -offset indent
+inside display
+.El
+.Ta stray tab
+after stray tab
+.Ed
+after display
 .Sh CAVEATS
 .Bl -hang
 .It before broken block Bo inside both
index 30a6888..692711c 100644 (file)
@@ -33,10 +33,17 @@ E\bEX\bXA\bAM\bMP\bPL\bLE\bES\bS
                       table after list
 
 
+D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bCS\bS
+     column
+
+           inside display after stray tab
+
+     after display
+
 C\bCA\bAV\bVE\bEA\bAT\bTS\bS
      before broken block [inside both after list]
 
 B\bBU\bUG\bGS\bS
      1.
 
-OpenBSD                        December 18, 2014                       OpenBSD
+OpenBSD                         August 20, 2016                        OpenBSD
index 934b4c1..fe099a4 100644 (file)
@@ -7,10 +7,12 @@ mandoc: break.in:42:2: ERROR: skipping item outside list: It
 mandoc: break.in:53:2: WARNING: blocks badly nested: Bl breaks Bd
 mandoc: break.in:56:2: WARNING: blocks badly nested: Bl breaks Bd
 mandoc: break.in:58:2: ERROR: inserting missing end of block: Sh breaks Bd
-mandoc: break.in:61:2: WARNING: blocks badly nested: Bl breaks Bo
-mandoc: break.in:63:2: ERROR: inserting missing end of block: Sh breaks Bo
-mandoc: break.in:66:2: WARNING: blocks badly nested: Bl breaks Bo
-mandoc: break.in:65:25: ERROR: appending missing end of block: Bo
-mandoc: break.in:64:2: ERROR: appending missing end of block: Bl
-mandoc: break.in:65:2: WARNING: empty list item: Bl -enum It
-mandoc: break.in:65:2: ERROR: skipping all arguments: It before broken block
+mandoc: break.in:63:2: WARNING: blocks badly nested: Bl breaks Bd
+mandoc: break.in:64:2: ERROR: skipping column outside column list: Ta
+mandoc: break.in:71:2: WARNING: blocks badly nested: Bl breaks Bo
+mandoc: break.in:73:2: ERROR: inserting missing end of block: Sh breaks Bo
+mandoc: break.in:76:2: WARNING: blocks badly nested: Bl breaks Bo
+mandoc: break.in:75:25: ERROR: appending missing end of block: Bo
+mandoc: break.in:74:2: ERROR: appending missing end of block: Bl
+mandoc: break.in:75:2: WARNING: empty list item: Bl -enum It
+mandoc: break.in:75:2: ERROR: skipping all arguments: It before broken block
index 7bc6b70..331aeb5 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: mdoc_macro.c,v 1.163 2016/08/13 09:14:56 schwarze Exp $ */
+/*     $OpenBSD: mdoc_macro.c,v 1.164 2016/08/20 15:58:16 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010, 2012-2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -1457,7 +1457,7 @@ phrase_ta(MACRO_PROT_ARGS)
                        continue;
                if (n->tok == MDOC_It && n->type == ROFFT_BODY)
                        body = n;
-               if (n->tok == MDOC_Bl)
+               if (n->tok == MDOC_Bl && n->end == ENDBODY_NOT)
                        break;
        }