Ошибка с SecKeychainGetPath - PullRequest
       2

Ошибка с SecKeychainGetPath

2 голосов
/ 22 октября 2011

Иногда при попытке получить путь к цепочке для ключей, возвращаемой 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 *

1 Ответ

3 голосов
/ 22 октября 2011

Из документации SecKeychainGetPath :

ioPathLength

При входе указатель на переменную, содержащуюдлина (в байтах) буфера, указанная pathName.
При возврате, длина строки pathName, не включая нулевое завершение.

Выне делать "на входе" часть.Вам нужно инициализировать pathLength до размера буфера pathName.Например:

UInt32 pathLength = 1024;
char *pathName = malloc(pathLength);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...