Empty conditions count as false.
authorschwarze <schwarze@openbsd.org>
Mon, 15 Dec 2014 23:42:31 +0000 (23:42 +0000)
committerschwarze <schwarze@openbsd.org>
Mon, 15 Dec 2014 23:42:31 +0000 (23:42 +0000)
When negated, they still count as false.
Found when investigating crashes jsg@ found with afl.
Not completely fixing the crashes yet.

regress/usr.bin/mandoc/roff/cond/ie.in
regress/usr.bin/mandoc/roff/cond/ie.out_ascii
usr.bin/mandoc/roff.c

index 8eea1a9..f9ab8bc 100644 (file)
@@ -1,4 +1,4 @@
-.TH IE 1 "July 1, 2014" OpenBSD
+.TH IE 1 "December 16, 2014" OpenBSD
 .SH NAME
 if \- the roff conditional instruction with else-clause
 .SH DESCRIPTION
@@ -17,6 +17,14 @@ after false.\}
 .br
 .el Another else after false.
 .br
+.ie
+Text following an empty condition.
+.el Else after empty condition.
+.br
+.ie !
+Text following negated empty condition.
+.el Else after negated empty condition.
+.br
 .ie n If \&.el\e{ works, nothing follows here:
 .el\{dummy
 BOOHOO\}
index b4cf313..73d3d97 100644 (file)
@@ -10,8 +10,10 @@ D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
        Text following the true condition.
        Text following the false condition.
        Two-line else after false.
+       Else after empty condition.
+       Else after negated empty condition.
        If .el\{ works, nothing follows here:
 
 
 
-OpenBSD                          July 1, 2014                            IE(1)
+OpenBSD                        December 16, 2014                         IE(1)
index 6ae4208..d4d923c 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: roff.c,v 1.111 2014/11/19 01:20:18 schwarze Exp $ */
+/*     $OpenBSD: roff.c,v 1.112 2014/12/15 23:42:31 schwarze Exp $ */
 /*
  * Copyright (c) 2010, 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -1256,6 +1256,8 @@ roff_evalcond(struct roff *r, int ln, const char *v, int *pos)
                wanttrue = 1;
 
        switch (v[*pos]) {
+       case '\0':
+               return(0);
        case 'n':
                /* FALLTHROUGH */
        case 'o':