summaryrefslogtreecommitdiffstats
path: root/src/network
diff options
context:
space:
mode:
Diffstat (limited to 'src/network')
-rw-r--r--src/network/ssl/qsslkey_openssl.cpp8
-rw-r--r--src/network/ssl/qsslkey_p.h17
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,