diff options
author | Timur Pocheptsov <timur.pocheptsov@qt.io> | 2020-12-17 06:42:11 +0100 |
---|---|---|
committer | Timur Pocheptsov <timur.pocheptsov@qt.io> | 2020-12-17 13:05:20 +0100 |
commit | 3bc398f76669c2532ae6e3f163f994feb7e6a0bf (patch) | |
tree | bf795558cbd3b3ae92672ccf80b3fba4e87babf7 /src | |
parent | 61943aefd68b7d88c5eb395c4e44d08a94a70ad0 (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')
-rw-r--r-- | src/network/ssl/qsslcertificate_openssl.cpp | 11 |
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; } |