fix for bug 40620

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@37385 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Richard Frith-MacDonald 2013-11-20 06:12:29 +00:00
parent 97a96d57af
commit b1ee5bf8a6
2 changed files with 15 additions and 1 deletions

View file

@ -1,3 +1,8 @@
2013-11-20 Richard Frith-Macdonald <rfm@gnu.org>
* Source/NSUserDefaults.m: Fix for bug 40620
Prevent recursion while parsing process arguments.
2013-11-19 Saso Kiselkov <skiselkov> 2013-11-19 Saso Kiselkov <skiselkov>
Releasing a GSTLSHandle (created from +[NSFileHandle sslClass]) after Releasing a GSTLSHandle (created from +[NSFileHandle sslClass]) after

View file

@ -100,6 +100,7 @@ static BOOL hasSharedDefaults = NO;
/* /*
* Caching some defaults. * Caching some defaults.
*/ */
static BOOL parsingArguments = NO;
static BOOL flags[GSUserDefaultMaxFlag] = { 0 }; static BOOL flags[GSUserDefaultMaxFlag] = { 0 };
/* An instance of the GSPersistentDomain class is used to encapsulate /* An instance of the GSPersistentDomain class is used to encapsulate
@ -2108,7 +2109,7 @@ static BOOL isPlistObject(id o)
BOOL BOOL
GSPrivateDefaultsFlag(GSUserDefaultFlagType type) GSPrivateDefaultsFlag(GSUserDefaultFlagType type)
{ {
if (sharedDefaults == nil) if (nil == sharedDefaults && NO == parsingArguments)
{ {
[NSUserDefaults standardUserDefaults]; [NSUserDefaults standardUserDefaults];
} }
@ -2162,6 +2163,12 @@ NSDictionary *GSPrivateDefaultLocale()
id key, val; id key, val;
[_lock lock]; [_lock lock];
if (YES == parsingArguments)
{
[_lock unlock];
return nil; // Prevent recursion
}
parsingArguments = YES;
NS_DURING NS_DURING
{ {
args = [[NSProcessInfo processInfo] arguments]; args = [[NSProcessInfo processInfo] arguments];
@ -2244,10 +2251,12 @@ NSDictionary *GSPrivateDefaultLocale()
} }
done = ((key = [enumerator nextObject]) == nil); done = ((key = [enumerator nextObject]) == nil);
} }
parsingArguments = NO;
[_lock unlock]; [_lock unlock];
} }
NS_HANDLER NS_HANDLER
{ {
parsingArguments = NO;
[_lock unlock]; [_lock unlock];
[localException raise]; [localException raise];
} }