Module Name: src Committed By: rillig Date: Sun Jul 19 19:27:08 UTC 2020
Modified Files: src/usr.bin/make: var.c src/usr.bin/make/unit-tests: modmisc.exp Log Message: make(1): fix off-by-one error in :C modifier Previously this off-by-one error had invoked undefined behavior. Until today there was no corresponding unit test though. To generate a diff of this commit: cvs rdiff -u -r1.270 -r1.271 src/usr.bin/make/var.c cvs rdiff -u -r1.16 -r1.17 src/usr.bin/make/unit-tests/modmisc.exp 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/var.c diff -u src/usr.bin/make/var.c:1.270 src/usr.bin/make/var.c:1.271 --- src/usr.bin/make/var.c:1.270 Sun Jul 19 18:35:53 2020 +++ src/usr.bin/make/var.c Sun Jul 19 19:27:08 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: var.c,v 1.270 2020/07/19 18:35:53 rillig Exp $ */ +/* $NetBSD: var.c,v 1.271 2020/07/19 19:27:08 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -69,14 +69,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: var.c,v 1.270 2020/07/19 18:35:53 rillig Exp $"; +static char rcsid[] = "$NetBSD: var.c,v 1.271 2020/07/19 19:27:08 rillig Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)var.c 8.3 (Berkeley) 3/19/94"; #else -__RCSID("$NetBSD: var.c,v 1.270 2020/07/19 18:35:53 rillig Exp $"); +__RCSID("$NetBSD: var.c,v 1.271 2020/07/19 19:27:08 rillig Exp $"); #endif #endif /* not lint */ #endif @@ -1578,7 +1578,7 @@ VarRESubstitute(GNode *ctx MAKE_ATTR_UNU rp++; } - if (n > pat->nsub) { + if (n >= pat->nsub) { Error("No subexpression %s", &errstr[0]); subbuf = ""; sublen = 0; Index: src/usr.bin/make/unit-tests/modmisc.exp diff -u src/usr.bin/make/unit-tests/modmisc.exp:1.16 src/usr.bin/make/unit-tests/modmisc.exp:1.17 --- src/usr.bin/make/unit-tests/modmisc.exp:1.16 Sun Jul 19 17:24:22 2020 +++ src/usr.bin/make/unit-tests/modmisc.exp Sun Jul 19 19:27:08 2020 @@ -52,6 +52,10 @@ mod-loop-dollar:$${word}$: mod-loop-dollar:$$5$$: mod-loop-dollar:$$${word}$$: mod-C-limits:00-ok:1 2323 45456 +make: No subexpression \1 +make: No subexpression \1 +make: No subexpression \1 +make: No subexpression \1 mod-C-limits:11-missing:1 6 mod-C-limits:11-ok:1 22 446 make: No subexpression \2 @@ -59,6 +63,10 @@ make: No subexpression \2 make: No subexpression \2 make: No subexpression \2 mod-C-limits:22-missing:1 6 +make: No subexpression \2 +make: No subexpression \2 +make: No subexpression \2 +make: No subexpression \2 mod-C-limits:22-missing:1 6 mod-C-limits:22-ok:1 33 556 exit status 0