diff options
| author | Marcel Moolenaar <marcel@FreeBSD.org> | 2003-01-15 22:36:15 +0000 |
|---|---|---|
| committer | Marcel Moolenaar <marcel@FreeBSD.org> | 2003-01-15 22:36:15 +0000 |
| commit | 7da1dd01e6ba959cab9b97480e2eacf16529fe60 (patch) | |
| tree | da610cb7f70beeca0a745d1e8a023daaa1510c52 /usr.bin/make | |
| parent | 332a7241defa7354e7ae453da24b4db20f95e700 (diff) | |
Notes
Diffstat (limited to 'usr.bin/make')
| -rw-r--r-- | usr.bin/make/var.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/usr.bin/make/var.c b/usr.bin/make/var.c index 32da4e860d2fc..3221bdd8ea84c 100644 --- a/usr.bin/make/var.c +++ b/usr.bin/make/var.c @@ -1350,15 +1350,16 @@ Var_Parse(char *str, GNode *ctxt, Boolean err, int *lengthPtr, Boolean *freePtr) } /* - * Replacing the empty string for something else when - * done globally causes an infinite loop. The only - * meaningful substitution of the empty string would - * be those anchored by '^' or '$'. Thus, we can - * safely turn the substitution into a non-global one - * if the LHS is the empty string. + * Global substitution of the empty string causes an + * infinite number of matches, unless anchored by '^' + * (start of string) or '$' (end of string). Catch the + * infinite substitution here. + * Note that flags can only contain the 3 bits we're + * interested in so we don't have to mask unrelated + * bits. We can test for equality. */ - if (pattern.leftLen == 0) - pattern.flags &= ~VAR_SUB_GLOBAL; + if (!pattern.leftLen && pattern.flags == VAR_SUB_GLOBAL) + Fatal("Global substitution of the empty string"); termc = *cp; newStr = VarModify(str, VarSubstitute, |
