summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTimur Pocheptsov <timur.pocheptsov@qt.io>2020-12-17 06:42:11 +0100
committerTarja Sundqvist <tarja.sundqvist@qt.io>2021-02-10 19:34:46 +0200
commitcef75f337ce1e0cace2601089901f00ea3ddb72a (patch)
tree82fceb7aef9ea1d0cfb68004f17d3202f00f1dc9
parent651cfe5c44f39e66539ba3fd999671fb94b47a77 (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. Change-Id: I1278b371bd1edf2d656760c371bfb6da5dcab6ec Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io> (cherry picked from commit 3bc398f76669c2532ae6e3f163f994feb7e6a0bf)
-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 c0fa0c288c..17c987f415 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;
}