Module Name:    src
Committed By:   rillig
Date:           Tue Jan 19 17:57:07 UTC 2021

Modified Files:
        src/usr.bin/make: cond.c

Log Message:
make(1): fix possible return values for CondParser_Term

The invalid return values didn't do any harm since CondParser_Factor and
CondParser_Expr passed them through, and CondParser_Eval carefully
checks for TOK_TRUE or TOK_FALSE and treats everything else as an error.

No change in observable behavior since there is no debug logging in that
part of the code.


To generate a diff of this commit:
cvs rdiff -u -r1.236 -r1.237 src/usr.bin/make/cond.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.bin/make/cond.c
diff -u src/usr.bin/make/cond.c:1.236 src/usr.bin/make/cond.c:1.237
--- src/usr.bin/make/cond.c:1.236	Tue Jan 19 17:49:13 2021
+++ src/usr.bin/make/cond.c	Tue Jan 19 17:57:07 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: cond.c,v 1.236 2021/01/19 17:49:13 rillig Exp $	*/
+/*	$NetBSD: cond.c,v 1.237 2021/01/19 17:57:07 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -95,7 +95,7 @@
 #include "dir.h"
 
 /*	"@(#)cond.c	8.2 (Berkeley) 1/2/94"	*/
-MAKE_RCSID("$NetBSD: cond.c,v 1.236 2021/01/19 17:49:13 rillig Exp $");
+MAKE_RCSID("$NetBSD: cond.c,v 1.237 2021/01/19 17:57:07 rillig Exp $");
 
 /*
  * The parsing of conditional expressions is based on this grammar:
@@ -924,14 +924,10 @@ CondParser_Term(CondParser *par, Boolean
 	Token t;
 
 	t = CondParser_Token(par, doEval);
+	if (t == TOK_TRUE || t == TOK_FALSE)
+		return t;
 
-	if (t == TOK_EOF) {
-		/*
-		 * If we reached the end of the expression, the expression
-		 * is malformed...
-		 */
-		t = TOK_ERROR;
-	} else if (t == TOK_LPAREN) {
+	if (t == TOK_LPAREN) {
 		/*
 		 * T -> ( E )
 		 */
@@ -948,13 +944,10 @@ CondParser_Term(CondParser *par, Boolean
 		} else if (t == TOK_FALSE) {
 			t = TOK_TRUE;
 		}
-	}
+	} else
+		return TOK_ERROR;
 
-	/*
-	 * FIXME: Can at least return TOK_AND, TOK_OR, TOK_RPAREN, maybe
-	 *  others as well.
-	 */
-	/* TODO: assert(t == TOK_ERROR); */
+	assert(t == TOK_TRUE || t == TOK_FALSE || t == TOK_ERROR);
 	return t;
 }
 

Reply via email to