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>
Releasing a GSTLSHandle (created from +[NSFileHandle sslClass]) after

View file

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