Prevent infinite substitution of the empty string by forcing non-
global substitution. In general it's a makefile bug to globally substitute the empty string, but it's a bug in make(1) if a bug in the makefile yields an infinite running time of make(1). Not objected to by: arch@
This commit is contained in:
parent
c1ba1fb120
commit
f9f65ee8ce
@ -1349,6 +1349,17 @@ Var_Parse(char *str, GNode *ctxt, Boolean err, int *lengthPtr, Boolean *freePtr)
|
||||
cp++;
|
||||
}
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
if (pattern.leftLen == 0)
|
||||
pattern.flags &= ~VAR_SUB_GLOBAL;
|
||||
|
||||
termc = *cp;
|
||||
newStr = VarModify(str, VarSubstitute,
|
||||
(void *)&pattern);
|
||||
|
Loading…
Reference in New Issue
Block a user