OpenSSL Stack API - освобождение объектов после помещения в стек - PullRequest
0 голосов
/ 16 февраля 2019

Я пытаюсь понять, нужно ли мне освобождать X509 объекты после помещения их в структуру STACK_OF(X509), или же вызов sk_X509_free() освобождает для меня все, включая содержимое.Я не нашел документации по этому вопросу в OpenSSL.

std::vector<std::string> caPems;    

// Fill the vector from input
// ...


BIO *bufio = NULL;
X509 *x509 = NULL, *x509_ca = NULL;
bool success = false;
STACK_OF(X509)* x509_ca_stack;

x509_ca_stack = sk_X509_new_null();
if (x509_ca_stack) {
    success = true;
    for (const std::string& caPem : caPems) {
        BIO_new_mem_buf(caPem.c_str(), caPem.size());
        PEM_read_bio_X509(bufio, &x509_ca, NULL, NULL);
        BIO_free_all(bufio);
        if (x509_ca != nullptr) {
            sk_X509_push(x509_ca_stack, x509_ca);
            x509_ca = NULL; // should I free after push???
        } else
            success = false;
    }
    if (success)
        foo(x509_ca_stack);
    sk_X509_free(x509_ca_stack); // or is this free enough for the entire stack?
} else {
    printf("ERROR: failed loading cert\n");
}

Редактировать: valgrind не помог, ничего не показывало, когда я освобождался, а когда нет.

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