diff src/network/qsslsocket_openssl.cpp src/network/qsslsocket_openssl.cpp --- src/network/qsslsocket_openssl.cpp +++ src/network/qsslsocket_openssl.cpp @@ -188,8 +188,8 @@ struct QSslErrorList Q_GLOBAL_STATIC(QSslErrorList, _q_sslErrorList) static int q_X509Callback(int ok, X509_STORE_CTX *ctx) { - Q_UNUSED(ok); - _q_sslErrorList()->errors << ctx->error; + if (!ok) + _q_sslErrorList()->errors << ctx->error; return ctx->error; } @@ -297,6 +297,7 @@ bool QSslSocketBackendPrivate::initSslContext() // Clear the session. q_SSL_clear(ssl); + errorList.clear(); // Initialize memory BIOs for encryption and decryption. readBio = q_BIO_new(q_BIO_s_mem()); @@ -570,7 +571,7 @@ bool QSslSocketBackendPrivate::testConnection() _q_sslErrorList()->mutex.lock(); _q_sslErrorList()->errors.clear(); int result = (mode == QSslSocket::SslClientMode) ? q_SSL_connect(ssl) : q_SSL_accept(ssl); - QList errorList = _q_sslErrorList()->errors; + errorList << _q_sslErrorList()->errors; _q_sslErrorList()->mutex.unlock(); // Check if we're encrypted or not. diff src/network/qsslsocket_openssl_p.h src/network/qsslsocket_openssl_p.h index be57b87..00b9b45 100644 --- src/network/qsslsocket_openssl_p.h +++ src/network/qsslsocket_openssl_p.h @@ -77,6 +77,7 @@ public: SSL_SESSION *session; X509_STORE *certificateStore; X509_STORE_CTX *certificateStoreCtx; + QList errorList; // Platform specific functions void startClientEncryption();