From a8a5b38b000ee8d4eed099bfc0a8a3528df6ad17 Mon Sep 17 00:00:00 2001 From: Martin Petersson Date: Fri, 30 Mar 2012 14:38:10 +0200 Subject: QSslSocket: call to ERR_free_strings to free loaded error strings Since we are calling q_SSL_load_error_strings to load error strings we should call ERR_free_strings to free the memory again. Task-number: QTBUG-15732 Change-Id: Ie41291bb0e1434f82025378edfca51930712a8aa Reviewed-by: Shane Kearns Reviewed-by: Thiago Macieira --- src/network/ssl/qsslsocket_openssl.cpp | 2 ++ src/network/ssl/qsslsocket_openssl_symbols.cpp | 2 ++ src/network/ssl/qsslsocket_openssl_symbols_p.h | 1 + 3 files changed, 5 insertions(+) (limited to 'src') diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp index 8d535ec295..2247148d31 100644 --- a/src/network/ssl/qsslsocket_openssl.cpp +++ b/src/network/ssl/qsslsocket_openssl.cpp @@ -539,6 +539,7 @@ void QSslSocketPrivate::deinitialize() { q_CRYPTO_set_id_callback(0); q_CRYPTO_set_locking_callback(0); + q_ERR_free_strings(); } /*! @@ -560,6 +561,7 @@ bool QSslSocketPrivate::ensureLibraryLoaded() // Check if the library itself needs to be initialized. QMutexLocker locker(openssl_locks()->initLock()); + if (!s_libraryLoaded) { s_libraryLoaded = true; diff --git a/src/network/ssl/qsslsocket_openssl_symbols.cpp b/src/network/ssl/qsslsocket_openssl_symbols.cpp index b5374d13cd..1180b8f4f0 100644 --- a/src/network/ssl/qsslsocket_openssl_symbols.cpp +++ b/src/network/ssl/qsslsocket_openssl_symbols.cpp @@ -125,6 +125,7 @@ DEFINEFUNC3(X509 *, d2i_X509, X509 **a, a, const unsigned char **b, b, long c, c #endif DEFINEFUNC2(char *, ERR_error_string, unsigned long a, a, char *b, b, return 0, return) DEFINEFUNC(unsigned long, ERR_get_error, DUMMYARG, DUMMYARG, return 0, return) +DEFINEFUNC(void, ERR_free_strings, void, DUMMYARG, return, DUMMYARG) DEFINEFUNC(const EVP_CIPHER *, EVP_des_ede3_cbc, DUMMYARG, DUMMYARG, return 0, return) DEFINEFUNC3(int, EVP_PKEY_assign, EVP_PKEY *a, a, int b, b, char *c, c, return -1, return) DEFINEFUNC2(int, EVP_PKEY_set1_RSA, EVP_PKEY *a, a, RSA *b, b, return -1, return) @@ -560,6 +561,7 @@ bool q_resolveOpenSslSymbols() RESOLVEFUNC(DSA_free) RESOLVEFUNC(ERR_error_string) RESOLVEFUNC(ERR_get_error) + RESOLVEFUNC(ERR_free_strings) RESOLVEFUNC(EVP_des_ede3_cbc) RESOLVEFUNC(EVP_PKEY_assign) RESOLVEFUNC(EVP_PKEY_set1_RSA) diff --git a/src/network/ssl/qsslsocket_openssl_symbols_p.h b/src/network/ssl/qsslsocket_openssl_symbols_p.h index b0d748692f..447afe07a2 100644 --- a/src/network/ssl/qsslsocket_openssl_symbols_p.h +++ b/src/network/ssl/qsslsocket_openssl_symbols_p.h @@ -226,6 +226,7 @@ X509 *q_d2i_X509(X509 **a, unsigned char **b, long c); #endif char *q_ERR_error_string(unsigned long a, char *b); unsigned long q_ERR_get_error(); +void q_ERR_free_strings(); const EVP_CIPHER *q_EVP_des_ede3_cbc(); int q_EVP_PKEY_assign(EVP_PKEY *a, int b, char *c); Q_AUTOTEST_EXPORT int q_EVP_PKEY_set1_RSA(EVP_PKEY *a, RSA *b); -- cgit v1.2.3