summaryrefslogtreecommitdiffstats
path: root/src/network
diff options
context:
space:
mode:
authorTimur Pocheptsov <timur.pocheptsov@qt.io>2020-12-17 06:42:11 +0100
committerTimur Pocheptsov <timur.pocheptsov@qt.io>2020-12-17 13:05:20 +0100
commit3bc398f76669c2532ae6e3f163f994feb7e6a0bf (patch)
treebf795558cbd3b3ae92672ccf80b3fba4e87babf7 /src/network
parent61943aefd68b7d88c5eb395c4e44d08a94a70ad0 (diff)
QSslCertificate::operator == - cleanup error queue
Another case when an OpenSSL's call can dump some errors into the shared error queue discovered. An invalid certificate with non-null X509 * may result in several errors appended to the queue. Pick-to: 6.0 5.15 Change-Id: I1278b371bd1edf2d656760c371bfb6da5dcab6ec Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
Diffstat (limited to 'src/network')
-rw-r--r--src/network/ssl/qsslcertificate_openssl.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/network/ssl/qsslcertificate_openssl.cpp b/src/network/ssl/qsslcertificate_openssl.cpp
index 35521427b2..11ad9aaf9a 100644
--- a/src/network/ssl/qsslcertificate_openssl.cpp
+++ b/src/network/ssl/qsslcertificate_openssl.cpp
@@ -65,10 +65,17 @@ bool QSslCertificate::operator==(const QSslCertificate &other) const
{
if (d == other.d)
return true;
+
if (d->null && other.d->null)
return true;
- if (d->x509 && other.d->x509)
- return q_X509_cmp(d->x509, other.d->x509) == 0;
+
+ if (d->x509 && other.d->x509) {
+ const int ret = q_X509_cmp(d->x509, other.d->x509);
+ if (ret >= -1 && ret <= 1)
+ return ret == 0;
+ QSslSocketBackendPrivate::logAndClearErrorQueue();
+ }
+
return false;
}