diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/network/ssl/qsslkey_openssl.cpp | 8 | ||||
-rw-r--r-- | src/network/ssl/qsslkey_p.h | 17 |
2 files changed, 10 insertions, 15 deletions
diff --git a/src/network/ssl/qsslkey_openssl.cpp b/src/network/ssl/qsslkey_openssl.cpp index 9053d20905..66995206fc 100644 --- a/src/network/ssl/qsslkey_openssl.cpp +++ b/src/network/ssl/qsslkey_openssl.cpp @@ -52,24 +52,24 @@ void QSslKeyPrivate::clear(bool deep) isNull = true; if (!QSslSocket::supportsSsl()) return; - if (rsa) { + if (algorithm == QSsl::Rsa && rsa) { if (deep) q_RSA_free(rsa); rsa = 0; } - if (dsa) { + if (algorithm == QSsl::Dsa && dsa) { if (deep) q_DSA_free(dsa); dsa = 0; } #ifndef OPENSSL_NO_EC - if (ec) { + if (algorithm == QSsl::Ec && ec) { if (deep) q_EC_KEY_free(ec); ec = 0; } #endif - if (opaque) { + if (algorithm == QSsl::Opaque && opaque) { if (deep) q_EVP_PKEY_free(opaque); opaque = 0; diff --git a/src/network/ssl/qsslkey_p.h b/src/network/ssl/qsslkey_p.h index f557831c2c..acd16044e8 100644 --- a/src/network/ssl/qsslkey_p.h +++ b/src/network/ssl/qsslkey_p.h @@ -62,13 +62,6 @@ class QSslKeyPrivate public: inline QSslKeyPrivate() : opaque(0) -#ifndef QT_NO_OPENSSL - , rsa(0) - , dsa(0) -#ifndef OPENSSL_NO_EC - , ec(0) -#endif -#endif { clear(); } @@ -97,12 +90,14 @@ public: QSsl::KeyType type; QSsl::KeyAlgorithm algorithm; #ifndef QT_NO_OPENSSL - EVP_PKEY *opaque; - RSA *rsa; - DSA *dsa; + union { + EVP_PKEY *opaque; + RSA *rsa; + DSA *dsa; #ifndef OPENSSL_NO_EC - EC_KEY *ec; + EC_KEY *ec; #endif + }; #else enum Cipher { DesCbc, |