From f6863745919c3ddf66734ca2045a9b5086835af1 Mon Sep 17 00:00:00 2001 From: Raul Metsma Date: Mon, 31 Aug 2009 11:20:52 +0200 Subject: Fix QSslCertificate::alternateSubjectNames() memory leak Task-number: 258964 Merge-request: 1382 Reviewed-by: Peter Hartmann --- src/network/ssl/qsslcertificate.cpp | 2 +- src/network/ssl/qsslsocket_openssl_symbols.cpp | 2 ++ src/network/ssl/qsslsocket_openssl_symbols_p.h | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/network/ssl/qsslcertificate.cpp b/src/network/ssl/qsslcertificate.cpp index 8d855b1..7b5653d 100644 --- a/src/network/ssl/qsslcertificate.cpp +++ b/src/network/ssl/qsslcertificate.cpp @@ -387,7 +387,7 @@ QMultiMap QSslCertificate::alternateSubje else if (genName->type == GEN_EMAIL) result.insert(QSsl::EmailEntry, altName); } - q_sk_free((STACK*)altNames); + q_sk_pop_free((STACK*)altNames, q_sk_free); } return result; diff --git a/src/network/ssl/qsslsocket_openssl_symbols.cpp b/src/network/ssl/qsslsocket_openssl_symbols.cpp index be5c93c..91cef69 100644 --- a/src/network/ssl/qsslsocket_openssl_symbols.cpp +++ b/src/network/ssl/qsslsocket_openssl_symbols.cpp @@ -144,6 +144,7 @@ DEFINEFUNC(int, RAND_status, void, DUMMYARG, return -1, return) DEFINEFUNC(void, RSA_free, RSA *a, a, return, DUMMYARG) DEFINEFUNC(void, sk_free, STACK *a, a, return, DUMMYARG) DEFINEFUNC(int, sk_num, STACK *a, a, return -1, return) +DEFINEFUNC2(void, sk_pop_free, STACK *a, a, void (*b)(STACK*), b, return, DUMMYARG) #if OPENSSL_VERSION_NUMBER >= 0x10000000L DEFINEFUNC2(void *, sk_value, STACK *a, a, int b, b, return 0, return) #else @@ -650,6 +651,7 @@ bool q_resolveOpenSslSymbols() RESOLVEFUNC(RSA_free) RESOLVEFUNC(sk_free) RESOLVEFUNC(sk_num) + RESOLVEFUNC(sk_pop_free) RESOLVEFUNC(sk_value) RESOLVEFUNC(SSL_CIPHER_description) RESOLVEFUNC(SSL_CTX_check_private_key) diff --git a/src/network/ssl/qsslsocket_openssl_symbols_p.h b/src/network/ssl/qsslsocket_openssl_symbols_p.h index 8c7acd7..38f92d4 100644 --- a/src/network/ssl/qsslsocket_openssl_symbols_p.h +++ b/src/network/ssl/qsslsocket_openssl_symbols_p.h @@ -256,6 +256,7 @@ int q_RAND_status(); void q_RSA_free(RSA *a); void q_sk_free(STACK *a); int q_sk_num(STACK *a); +void q_sk_pop_free(STACK *a, void (*b)(STACK *)); #if OPENSSL_VERSION_NUMBER >= 0x10000000L void * q_sk_value(STACK *a, int b); #else -- cgit v0.12