Используя OpenSSL 1.1.x, как указать освобождение элементов STACK_OF (X509_EXTENSION) после вызова функции, такой как sk_X509_EXTENSION_pop_free ()? - PullRequest
0 голосов
/ 21 июня 2019

При переносе приложений из OpenSSL 1.0.2 в OpenSSL 1.1.x я столкнулся с проблемой, когда не могу найти метод для «обнуления» указателей STACK_OF (X509_EXTENSION), чтобы показать, что связанный элемент был освобожден.

Например, фрагмент моего существующего приложения, использующего OpenSSL 1.0.2j, выглядит примерно так:

X509 *cert;

// ... init X509 cert here ...

if (cert->cert_info != NULL)
{
    sk_X509_EXTENSION_pop_free(cert->cert_info->extensions, X509_EXTENSION_free);
    cert->cert_info->extensions = NULL; // indicate extensions stack deallocated
}

// ... do other stuff ...

После перехода на OpenSSL 1.1.x приведенный выше фрагмент будет выглядеть примерно так:

X509 *cert;
const STACK_OF(X509_EXTENSION) *certExts; 

// ... init X509 cert here ...

if ((certExts = X509_get0_extensions(cert)) != NULL)  
{   
    sk_X509_EXTENSION_pop_free(certExts, X509_EXTENSION_free);
    // now, what??
}

// ... do other stuff ...

Без встроенного метода OpenSSL 1.1.x для указания освобождения, если приложение впоследствии разыменовывает тот же элемент (например, другой вызов sk_X509_EXTENSION_pop_free (), который проверяет на NULL), то оно будет работать с указателем на освобождение память.

Я что-то упустил или обдумал это? Я не хочу изменять исходный код OpenSSL из-за последствий лицензирования. Все комментарии / предложения приветствуются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...