diff options
Diffstat (limited to 'contrib/bmake/unit-tests/varmod-defined.mk')
-rw-r--r-- | contrib/bmake/unit-tests/varmod-defined.mk | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/contrib/bmake/unit-tests/varmod-defined.mk b/contrib/bmake/unit-tests/varmod-defined.mk index a44b9f993146..2ee9def9e164 100644 --- a/contrib/bmake/unit-tests/varmod-defined.mk +++ b/contrib/bmake/unit-tests/varmod-defined.mk @@ -1,8 +1,11 @@ -# $NetBSD: varmod-defined.mk,v 1.11 2021/04/11 13:35:56 rillig Exp $ +# $NetBSD: varmod-defined.mk,v 1.16 2023/11/19 21:47:52 rillig Exp $ # # Tests for the :D variable modifier, which returns the given string # if the variable is defined. It is closely related to the :U modifier. +# Force the test results to be independent of the default value of this +# setting, which is 'yes' for NetBSD's usr.bin/make but 'no' for the bmake +# distribution and pkgsrc/devel/bmake. .MAKE.SAVE_DOLLARS= yes DEF= defined @@ -43,10 +46,10 @@ DEF= defined . error .endif -# Like in several other places in variable expressions, when +# Like in several other places in expressions, when # ApplyModifier_Defined calls Var_Parse, double dollars lead to a parse # error that is silently ignored. This makes all dollar signs disappear, -# except for the last, which is a well-formed variable expression. +# except for the last, which is a well-formed expression. # .if ${DEF:D$$$$$${DEF}} != "defined" . error @@ -55,7 +58,7 @@ DEF= defined # Any other text is written without any further escaping. In contrast # to the :M modifier, parentheses and braces do not need to be nested. # Instead, the :D modifier is implemented sanely by parsing nested -# expressions as such, without trying any shortcuts. See ApplyModifier_Match +# expressions as such, without trying any shortcuts. See ParseModifier_Match # for an inferior variant. # .if ${DEF:D!&((((} != "!&((((" @@ -101,5 +104,13 @@ VAR:= ${VAR:D${8_DOLLARS}} VAR:= ${VAR:@var@${8_DOLLARS}@} .MAKEFLAGS: -d0 -all: - @:; + +# Before var.c 1.1030 from 2022-08-24, the following expression caused an +# out-of-bounds read when parsing the indirect ':U' modifier. +M_U_backslash:= ${:UU\\} +.if ${:${M_U_backslash}} != "\\" +. error +.endif + + +all: .PHONY |