If a stray .It follows .El, we are no longer in the list,
authorschwarze <schwarze@openbsd.org>
Sat, 16 Aug 2014 19:47:17 +0000 (19:47 +0000)
committerschwarze <schwarze@openbsd.org>
Sat, 16 Aug 2014 19:47:17 +0000 (19:47 +0000)
even though the list is still the last processed macro.
This fixes a regression introduced in mdoc_macro.c rev. 1.95:
Ulrich Spoerlein <uqs at FreeBSD> reports that various of their
kernel manuals trigger assertions.

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

index e844b27..ad43c4b 100644 (file)
@@ -1,4 +1,4 @@
-.Dd July 30, 2014
+.Dd August 16, 2014
 .Dt BL-BAREIT 1
 .Os OpenBSD
 .Sh NAME
@@ -7,4 +7,9 @@
 .Sh DESCRIPTION
 initial text
 .It argument
+.Bl -dash
+.It
+item
+.El
+.It argument
 final text
index 9ded54f..aa1401a 100644 (file)
@@ -5,6 +5,8 @@ N\bNA\bAM\bME\bE
 
 D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
      initial text
+
+     -\b-   item
      final text
 
-OpenBSD                          July 30, 2014                         OpenBSD
+OpenBSD                         August 16, 2014                        OpenBSD
index 45109ee..9badbf2 100644 (file)
@@ -1 +1,3 @@
 mandoc: bareIt.in:9:2: ERROR: skipping item outside list: It argument
+mandoc: bareIt.in:9:2: WARNING: skipping paragraph macro: br before Bl
+mandoc: bareIt.in:14:2: ERROR: skipping item outside list: It argument
index 91448ad..8f05181 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mdoc_macro.c,v 1.96 2014/08/08 15:54:10 schwarze Exp $ */
+/*     $Id: mdoc_macro.c,v 1.97 2014/08/16 19:47:17 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010, 2012, 2013 Ingo Schwarze <schwarze@openbsd.org>
@@ -1037,7 +1037,8 @@ blk_full(MACRO_PROT_ARGS)
 
        if (tok == MDOC_It) {
                for (n = mdoc->last; n; n = n->parent)
-                       if (n->tok == MDOC_Bl)
+                       if (n->tok == MDOC_Bl &&
+                           ! (n->flags & MDOC_VALID))
                                break;
                if (n == NULL) {
                        mandoc_vmsg(MANDOCERR_IT_STRAY, mdoc->parse,