X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/866f8763175ff60e4fa455b92b5eb660a12fe6c7..67d61d2eddbf13b089421b1c08b0353e50c467d7:/OSX/libsecurity_transform/lib/TransformFactory.cpp diff --git a/OSX/libsecurity_transform/lib/TransformFactory.cpp b/OSX/libsecurity_transform/lib/TransformFactory.cpp index 6ab2ea34..91f7d661 100644 --- a/OSX/libsecurity_transform/lib/TransformFactory.cpp +++ b/OSX/libsecurity_transform/lib/TransformFactory.cpp @@ -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);