Module Name:    src
Committed By:   rillig
Date:           Tue Sep 22 18:54:51 UTC 2020

Modified Files:
        src/usr.bin/make/unit-tests: directive-for.exp directive-for.mk

Log Message:
make(1): add test for .for loop from PR bin/29985


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/usr.bin/make/unit-tests/directive-for.exp
cvs rdiff -u -r1.3 -r1.4 src/usr.bin/make/unit-tests/directive-for.mk

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/unit-tests/directive-for.exp
diff -u src/usr.bin/make/unit-tests/directive-for.exp:1.2 src/usr.bin/make/unit-tests/directive-for.exp:1.3
--- src/usr.bin/make/unit-tests/directive-for.exp:1.2	Mon Sep 14 18:49:24 2020
+++ src/usr.bin/make/unit-tests/directive-for.exp	Tue Sep 22 18:54:50 2020
@@ -1,2 +1,3 @@
 make: "directive-for.mk" line 100: outer
+make: "directive-for.mk" line 125: a:\ a:\file.txt
 exit status 0

Index: src/usr.bin/make/unit-tests/directive-for.mk
diff -u src/usr.bin/make/unit-tests/directive-for.mk:1.3 src/usr.bin/make/unit-tests/directive-for.mk:1.4
--- src/usr.bin/make/unit-tests/directive-for.mk:1.3	Mon Sep 14 18:49:24 2020
+++ src/usr.bin/make/unit-tests/directive-for.mk	Tue Sep 22 18:54:51 2020
@@ -1,4 +1,4 @@
-# $NetBSD: directive-for.mk,v 1.3 2020/09/14 18:49:24 rillig Exp $
+# $NetBSD: directive-for.mk,v 1.4 2020/09/22 18:54:51 rillig Exp $
 #
 # Tests for the .for directive.
 
@@ -101,5 +101,29 @@ EXPANSION${plus}=	value
 .  endfor
 .endfor
 
+# From https://gnats.netbsd.org/29985.
+#
+# Until 2008-12-21, the .for loop was expanded by replacing the variable
+# value literally in the body.  This could lead to situations where the
+# characters from the variable value were interpreted as markup rather than
+# plain text.
+#
+# Until 2012-06-03, the .for loop had split the words at whitespace, without
+# taking quotes into account.  This made it possible to have variable values
+# like "a:\ a:\file.txt" that ended in a single backslash.  Since then, the
+# variable values have been replaced with expressions of the form ${:U...},
+# which are not interpreted as code anymore.
+#
+# As of 2020-09-22, a comment in for.c says that it may be possible to
+# produce an "unwanted substitution", but there is no demonstration code yet.
+#
+# The above changes prevent a backslash at the end of a word from being
+# interpreted as part of the code.  Because of this, the trailingBackslash
+# hack in Var_Subst is no longer needed and as of 2020-09-22, has been
+# removed.
+.for path in a:\ a:\file.txt
+.  info ${path}
+.endfor
+
 all:
 	@:;

Reply via email to