Fix resource leaks (failure to close) on error.

This commit is contained in:
Richard Frith-Macdonald 2021-02-03 16:23:43 +00:00
parent 61709e6101
commit be173ab404

View file

@ -1014,21 +1014,29 @@ static NSRecursiveLock *classLock = nil;
NSCharacterSet *result;
NSMutableCharacterSet *mSet;
mSet = [[NSMutableCharacterSet alloc] init];
if (mSet == nil)
return nil;
cLocaleId = [_localeId UTF8String];
localeData = ulocdata_open (cLocaleId, &err);
localeData = ulocdata_open(cLocaleId, &err);
if (U_FAILURE(err))
return nil;
{
return nil;
}
charSet = ulocdata_getExemplarSet (localeData, NULL,
charSet = ulocdata_getExemplarSet(localeData, NULL,
USET_ADD_CASE_MAPPINGS, ULOCDATA_ES_STANDARD, &err);
if (U_FAILURE(err))
return nil;
{
ulocdata_close(localeData);
return nil;
}
ulocdata_close(localeData);
mSet = [[NSMutableCharacterSet alloc] init];
if (mSet == nil)
{
uset_close(charSet);
return nil;
}
count = uset_getItemCount(charSet);
for (idx = 0 ; idx < count ; ++idx)
{
@ -1036,9 +1044,10 @@ static NSRecursiveLock *classLock = nil;
int strLen;
err = U_ZERO_ERROR;
strLen = uset_getItem (charSet, idx, &start, &end, buffer, 1024, &err);
strLen = uset_getItem(charSet, idx, &start, &end, buffer, 1024, &err);
if (U_FAILURE(err))
{
uset_close(charSet);
RELEASE(mSet);
return nil;
}
@ -1055,10 +1064,11 @@ static NSRecursiveLock *classLock = nil;
// FIXME: The icu docs are a bit iffy and don't explain what len == 1
// means. So, if it is encountered, we simply skip it.
}
uset_close (charSet);
uset_close(charSet);
result = [mSet copyWithZone: NULL];
RELEASE(mSet);
return AUTORELEASE(result);
#else
return nil;