Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/usr.bin/make make: fix double expansion when appending to a ...
details: https://anonhg.NetBSD.org/src/rev/56b49f9f9593
branches: trunk
changeset: 959171:56b49f9f9593
user: rillig <rillig%NetBSD.org@localhost>
date: Wed Feb 03 08:40:47 2021 +0000
description:
make: fix double expansion when appending to a new variable
diffstat:
usr.bin/make/unit-tests/var-op-append.exp | 2 +-
usr.bin/make/unit-tests/var-op-append.mk | 14 ++++++--------
usr.bin/make/unit-tests/varname-empty.exp | 2 +-
usr.bin/make/var.c | 20 ++++++++++----------
4 files changed, 18 insertions(+), 20 deletions(-)
diffs (111 lines):
diff -r 0e96db73dfb7 -r 56b49f9f9593 usr.bin/make/unit-tests/var-op-append.exp
--- a/usr.bin/make/unit-tests/var-op-append.exp Wed Feb 03 08:34:15 2021 +0000
+++ b/usr.bin/make/unit-tests/var-op-append.exp Wed Feb 03 08:40:47 2021 +0000
@@ -1,7 +1,7 @@
Var_Parse: ${:U\$\$\$\$\$\$\$\$} with VARE_WANTRES
Applying ${:U...} to "" (VARE_WANTRES, none, VES_UNDEF)
Result of ${:U\$\$\$\$\$\$\$\$} is "$$$$$$$$" (VARE_WANTRES, none, VES_DEF)
-Global:VAR.$$$$ = dollars
+Global:VAR.$$$$$$$$ = dollars
Global:.MAKEFLAGS = -r -k -d v -d
Global:.MAKEFLAGS = -r -k -d v -d 0
exit status 0
diff -r 0e96db73dfb7 -r 56b49f9f9593 usr.bin/make/unit-tests/var-op-append.mk
--- a/usr.bin/make/unit-tests/var-op-append.mk Wed Feb 03 08:34:15 2021 +0000
+++ b/usr.bin/make/unit-tests/var-op-append.mk Wed Feb 03 08:40:47 2021 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: var-op-append.mk,v 1.7 2020/10/30 20:36:33 rillig Exp $
+# $NetBSD: var-op-append.mk,v 1.8 2021/02/03 08:40:47 rillig Exp $
#
# Tests for the += variable assignment operator, which appends to a variable,
# creating it if necessary.
@@ -32,17 +32,15 @@
. error
.endif
-# Try out how often the variable name is expanded when appending to a
-# nonexistent variable.
-# As of 2020-10-30, that's two times.
-# XXX: That's one time too often.
-# See Var_Append, the call to Var_Set.
+# Before var.c 1.793 from 2021-02-03, the variable name of a newly created
+# variable was expanded two times in a row, which was unexpected but
+# irrelevant in practice since variable names containing dollars lead to
+# strange side effects in several other places as well.
.MAKEFLAGS: -dv
VAR.${:U\$\$\$\$\$\$\$\$}+= dollars
.MAKEFLAGS: -d0
-.if ${VAR.${:U\$\$\$\$}} != "dollars"
+.if ${VAR.${:U\$\$\$\$\$\$\$\$}} != "dollars"
. error
.endif
all:
- @:;
diff -r 0e96db73dfb7 -r 56b49f9f9593 usr.bin/make/unit-tests/varname-empty.exp
--- a/usr.bin/make/unit-tests/varname-empty.exp Wed Feb 03 08:34:15 2021 +0000
+++ b/usr.bin/make/unit-tests/varname-empty.exp Wed Feb 03 08:40:47 2021 +0000
@@ -20,7 +20,7 @@
Global:delete .INCLUDEDFROMFILE (not found)
Var_Set("", "default", ...) name expands to empty string - ignored
Var_Set("", "assigned", ...) name expands to empty string - ignored
-Var_Set("", "appended", ...) name expands to empty string - ignored
+SetVar: variable name is empty - ignored
Var_Set("", "", ...) name expands to empty string - ignored
Var_Set("", "subst", ...) name expands to empty string - ignored
Var_Set("", "shell-output", ...) name expands to empty string - ignored
diff -r 0e96db73dfb7 -r 56b49f9f9593 usr.bin/make/var.c
--- a/usr.bin/make/var.c Wed Feb 03 08:34:15 2021 +0000
+++ b/usr.bin/make/var.c Wed Feb 03 08:40:47 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: var.c,v 1.792 2021/02/03 08:08:18 rillig Exp $ */
+/* $NetBSD: var.c,v 1.793 2021/02/03 08:40:47 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -131,7 +131,7 @@
#include "metachar.h"
/* "@(#)var.c 8.3 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: var.c,v 1.792 2021/02/03 08:08:18 rillig Exp $");
+MAKE_RCSID("$NetBSD: var.c,v 1.793 2021/02/03 08:40:47 rillig Exp $");
typedef enum VarFlags {
VAR_NONE = 0,
@@ -916,6 +916,12 @@
{
Var *v;
+ assert(val != NULL);
+ if (name[0] == '\0') {
+ DEBUG0(VAR, "SetVar: variable name is empty - ignored\n");
+ return;
+ }
+
if (ctxt == VAR_GLOBAL) {
v = VarFind(name, VAR_CMDLINE, FALSE);
if (v != NULL) {
@@ -1034,12 +1040,7 @@
void
Global_Set(const char *name, const char *value)
{
- assert(value != NULL);
-
- if (name[0] == '\0')
- DEBUG0(VAR, "Variable name empty - ignored\n");
- else
- SetVar(name, value, VAR_GLOBAL, VAR_SET_NONE);
+ SetVar(name, value, VAR_GLOBAL, VAR_SET_NONE);
}
void
@@ -1093,8 +1094,7 @@
v = VarFind(name, ctxt, ctxt == VAR_GLOBAL);
if (v == NULL) {
- /* XXX: name is expanded for the second time */
- Var_Set(name, val, ctxt);
+ SetVar(name, val, ctxt, VAR_SET_NONE);
} else if (v->flags & VAR_READONLY) {
DEBUG1(VAR, "Ignoring append to %s since it is read-only\n",
name);
Home |
Main Index |
Thread Index |
Old Index