diff options
| author | nyamatongwe <unknown> | 2003-04-30 10:48:46 +0000 | 
|---|---|---|
| committer | nyamatongwe <unknown> | 2003-04-30 10:48:46 +0000 | 
| commit | 9fbb2672d2753efdb8fc6149c6e257e8c568558e (patch) | |
| tree | 43ed22b834fcf13be815bb6daf9e823c335a93f4 /src/PropSet.cxx | |
| parent | dc9a5dcabf55728bb9f2488501a2a78f74b1edac (diff) | |
| download | scintilla-mirror-9fbb2672d2753efdb8fc6149c6e257e8c568558e.tar.gz | |
More protection against recursive property settings.
Diffstat (limited to 'src/PropSet.cxx')
| -rw-r--r-- | src/PropSet.cxx | 32 | 
1 files changed, 16 insertions, 16 deletions
| diff --git a/src/PropSet.cxx b/src/PropSet.cxx index 18544aef2..8455d854d 100644 --- a/src/PropSet.cxx +++ b/src/PropSet.cxx @@ -9,7 +9,6 @@  #include <stdlib.h>  #include <string.h> -//#include <ctype.h>  #include <stdio.h>  #include "Platform.h" @@ -182,25 +181,26 @@ SString PropSet::GetExpanded(const char *key) {  	return Expand(val.c_str());  } -SString PropSet::Expand(const char *withVars) { +SString PropSet::Expand(const char *withVars, int maxExpands) {  	char *base = StringDup(withVars);  	char *cpvar = strstr(base, "$("); -	int maxExpands = 1000;	// Avoid infinite expansion of recursive definitions  	while (cpvar && (maxExpands > 0)) {  		char *cpendvar = strchr(cpvar, ')'); -		if (cpendvar) { -			int lenvar = cpendvar - cpvar - 2;  	// Subtract the $() -			char *var = StringDup(cpvar + 2, lenvar); -			SString val = GetExpanded(var); -			size_t newlenbase = strlen(base) + val.length() - lenvar; -			char *newbase = new char[newlenbase]; -			strncpy(newbase, base, cpvar - base); -			strcpy(newbase + (cpvar - base), val.c_str()); -			strcpy(newbase + (cpvar - base) + val.length(), cpendvar + 1); -			delete []var; -			delete []base; -			base = newbase; -		} +		if (!cpendvar) +			break; +		int lenvar = cpendvar - cpvar - 2;  	// Subtract the $() +		char *var = StringDup(cpvar + 2, lenvar); +		SString val = Get(var); +		if (IncludesVar(val.c_str(), var)) +			break; +		size_t newlenbase = strlen(base) + val.length() - lenvar; +		char *newbase = new char[newlenbase]; +		strncpy(newbase, base, cpvar - base); +		strcpy(newbase + (cpvar - base), val.c_str()); +		strcpy(newbase + (cpvar - base) + val.length(), cpendvar + 1); +		delete []var; +		delete []base; +		base = newbase;  		cpvar = strstr(base, "$(");  		maxExpands--;  	} | 
