Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.bin/make/unit-tests make: demonstrate wrong expression e...



details:   https://anonhg.NetBSD.org/src/rev/8ceeaf4d8f56
branches:  trunk
changeset: 953612:8ceeaf4d8f56
user:      rillig <rillig%NetBSD.org@localhost>
date:      Sun Mar 14 10:45:51 2021 +0000

description:
make: demonstrate wrong expression evaluation in -dL mode

diffstat:

 usr.bin/make/unit-tests/Makefile           |  11 ++++++++---
 usr.bin/make/unit-tests/opt-debug-lint.exp |   1 +
 usr.bin/make/unit-tests/opt-debug-lint.mk  |  17 ++++++++++++++---
 3 files changed, 23 insertions(+), 6 deletions(-)

diffs (78 lines):

diff -r d6e6acd9c48f -r 8ceeaf4d8f56 usr.bin/make/unit-tests/Makefile
--- a/usr.bin/make/unit-tests/Makefile  Sun Mar 14 10:36:46 2021 +0000
+++ b/usr.bin/make/unit-tests/Makefile  Sun Mar 14 10:45:51 2021 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.271 2021/02/14 20:16:17 rillig Exp $
+# $NetBSD: Makefile,v 1.272 2021/03/14 10:45:51 rillig Exp $
 #
 # Unit tests for make(1)
 #
@@ -493,6 +493,7 @@
 SED_CMDS.opt-debug-jobs+=      -e 's,Command: ${.SHELL:T},Command: <shell>,'
 # The "-q" may be there or not, see jobs.c, variable shells.
 SED_CMDS.opt-debug-jobs+=      -e 's,^\(.Command: <shell>\) -q,\1,'
+SED_CMDS.opt-debug-lint+=      ${STD_SED_CMDS.regex}
 SED_CMDS.opt-jobs-no-action=   ${STD_SED_CMDS.hide-from-output}
 SED_CMDS.opt-no-action-runflags= ${STD_SED_CMDS.hide-from-output}
 # For Compat_RunCommand, useShell == FALSE.
@@ -508,8 +509,7 @@
 SED_CMDS.var-op-shell+=                ${STD_SED_CMDS.shell}
 SED_CMDS.var-op-shell+=                -e '/command/s,No such.*,not found,'
 SED_CMDS.vardebug+=            -e 's,${.SHELL},</path/to/shell>,'
-SED_CMDS.varmod-subst-regex+= \
-                       -e 's,\(Regex compilation error:\).*,\1 (details omitted),'
+SED_CMDS.varmod-subst-regex+=  ${STD_SED_CMDS.regex}
 SED_CMDS.varname-dot-parsedir= -e '/in some cases/ s,^make: "[^"]*,make: "<normalized>,'
 SED_CMDS.varname-dot-parsefile=        -e '/in some cases/ s,^make: "[^"]*,make: "<normalized>,'
 SED_CMDS.varname-dot-shell=    -e 's, = /[^ ]*, = (details omitted),g'
@@ -587,6 +587,11 @@
 STD_SED_CMDS.shell+=           -e 's,^${.SHELL:T}: [0-9][0-9]*: ,,'
 STD_SED_CMDS.shell+=           -e 's,^${.SHELL:T}: ,,'
 
+# The actual error messages for a failed regcomp or regexec differ between the
+# implementations.
+STD_SED_CMDS.regex= \
+       -e 's,\(Regex compilation error:\).*,\1 (details omitted),'
+
 # End of the configuration helpers section.
 
 UNIT_TESTS:=   ${.PARSEDIR}
diff -r d6e6acd9c48f -r 8ceeaf4d8f56 usr.bin/make/unit-tests/opt-debug-lint.exp
--- a/usr.bin/make/unit-tests/opt-debug-lint.exp        Sun Mar 14 10:36:46 2021 +0000
+++ b/usr.bin/make/unit-tests/opt-debug-lint.exp        Sun Mar 14 10:45:51 2021 +0000
@@ -3,6 +3,7 @@
 make: "opt-debug-lint.mk" line 61: Missing delimiter ':' after modifier "L"
 make: "opt-debug-lint.mk" line 61: Missing delimiter ':' after modifier "P"
 make: "opt-debug-lint.mk" line 69: Unknown modifier "${"
+make: Regex compilation error: (details omitted)
 make: Fatal errors encountered -- cannot continue
 make: stopped in unit-tests
 exit status 1
diff -r d6e6acd9c48f -r 8ceeaf4d8f56 usr.bin/make/unit-tests/opt-debug-lint.mk
--- a/usr.bin/make/unit-tests/opt-debug-lint.mk Sun Mar 14 10:36:46 2021 +0000
+++ b/usr.bin/make/unit-tests/opt-debug-lint.mk Sun Mar 14 10:45:51 2021 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: opt-debug-lint.mk,v 1.12 2020/12/20 19:10:53 rillig Exp $
+# $NetBSD: opt-debug-lint.mk,v 1.13 2021/03/14 10:45:51 rillig Exp $
 #
 # Tests for the -dL command line option, which runs additional checks
 # to catch common mistakes, such as unclosed variable expressions.
@@ -77,5 +77,16 @@
 .  error
 .endif
 
-all:
-       @:;
+# Before var.c 1.XXX from 2021-03-14, the whole variable text was evaluated
+# to check for unclosed expressions and unknown operators.  During this check,
+# the subexpression '${:U2}' was not expanded, instead it was copied verbatim
+# into the regular expression, which was '.*=.{1,${:U2}}$'.  This regular
+# expression was then compiled (despite VARE_WANTRES being unset), which
+# resulted in a wrong error message.
+#
+# This only happened in lint mode since in default mode the early check for
+# unclosed expressions and unknown modifiers is skipped.
+#
+# See VarCheckSyntax, ApplyModifier_Regex.
+#
+VARMOD_REGEX=  ${:UA=111 B=222 C=33:C/.*=.{1,${:U2}}$//g}



Home | Main Index | Thread Index | Old Index