X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/5c19dc3ae3bd8e40a9c028b0deddd50ff337692c..b3971512e61ecab68b17ca7ffe6c8c600310a026:/OSX/libsecurity_transform/lib/TransformFactory.cpp diff --git a/OSX/libsecurity_transform/lib/TransformFactory.cpp b/OSX/libsecurity_transform/lib/TransformFactory.cpp index 2eb68f28..91f7d661 100644 --- a/OSX/libsecurity_transform/lib/TransformFactory.cpp +++ b/OSX/libsecurity_transform/lib/TransformFactory.cpp @@ -70,7 +70,7 @@ TransformFactory* TransformFactory::FindTransformFactoryByType(CFStringRef name) -SecTransformRef TransformFactory::MakeTransformWithType(CFStringRef type, CFErrorRef* baseError) +SecTransformRef TransformFactory::MakeTransformWithType(CFStringRef type, CFErrorRef* baseError) CF_RETURNS_RETAINED { TransformFactory* tf = FindTransformFactoryByType(type); if (!tf) @@ -85,7 +85,13 @@ SecTransformRef TransformFactory::MakeTransformWithType(CFStringRef type, CFErro dispatch_barrier_sync(gRegisteredQueue, ^(void) { CFMutableStringRef transformNames = CFStringCreateMutable(NULL, 0); CFIndex numberRegistered = CFDictionaryGetCount(gRegistered); - CFStringRef names[numberRegistered]; + CFStringRef *names = (CFStringRef*)malloc(numberRegistered * sizeof(CFStringRef)); + if (names == NULL) { + *baseError = CreateSecTransformErrorRef(errSecMemoryError, + "The %s transform names can't be allocated.", type); + return NULL; + } + CFDictionaryGetKeysAndValues(gRegistered, (const void**)names, NULL); for(int i = 0; i < numberRegistered; i++) { if (i != 0) { @@ -94,6 +100,8 @@ SecTransformRef TransformFactory::MakeTransformWithType(CFStringRef type, CFErro CFStringAppend(transformNames, names[i]); } + free(names); + *baseError = CreateSecTransformErrorRef(kSecTransformTransformIsNotRegistered, "The %s transform is not registered, choose from: %@", type,transformNames);