Иногда при попытке получить путь к цепочке для ключей, возвращаемой SecKeychainCopySearchList
, я получаю ошибку с кодом -25301
, который из списка ошибок обозначает errSecBufferTooSmall
. SecCopyErrorMessageString
состояния:
There is not enough memory available to use the specified item.
Странно то, что он не всегда возвращает ошибку в одной и той же ссылке цепочки для ключей.
Вот как я пытаюсь найти путь к цепочке для ключей:
- (NSString *)getKeychainPath:(SecKeychainRef)keychain {
char *pathName = malloc(sizeof(*pathName) * 1024);
UInt32 pathLength;
OSStatus errCode = SecKeychainGetPath(keychain, &pathLength, pathName);
if (errCode != errSecSuccess) {
NSString *errString = (NSString *)SecCopyErrorMessageString(errCode, NULL);
DLog(@"%d: %@", errCode, errString);
}
NSData *d = [NSData dataWithBytes:pathName length:pathLength];
return [[[NSString alloc] initWithData:d encoding:NSUTF8StringEncoding] autorelease];
}
Меня интересует, какой буфер использует функция? Я попытался вывести переменную pathLength
, но она ниже 1K байтов. Что я делаю неправильно? Что я должен сделать, чтобы избежать этих ошибок? Можно ли вообще их обойти? 1014 *