При переносе приложений из 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 из-за последствий лицензирования. Все комментарии / предложения приветствуются.