summaryrefslogtreecommitdiffstats
path: root/src/network/ssl
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@kdab.com>2016-02-04 10:38:50 +0100
committerMarc Mutz <marc.mutz@kdab.com>2016-02-08 22:06:42 +0000
commit8a549506464d1356fe9ff63ac0c56ea85cd38e8b (patch)
tree6f840d5fcf3ddb9a884a411bf17d51221fd6c843 /src/network/ssl
parentb034a14dc589fecbbb1e0c807690910303ca82a3 (diff)
Optimize QSslSocketPrivate::isMatchingHostname()
- Lowercase 'peerName' only once instead of each time though the loop - Use C++11 range-for instead of Q_FOREACH - Use QMap::equal_range instead of values(Key), saving the creation of a QList. Change-Id: I1229f62d706d1478960b08bb63ee9fb894364f87 Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com> Reviewed-by: Richard J. Moore <rich@kde.org> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/network/ssl')
-rw-r--r--src/network/ssl/qsslsocket.cpp15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp
index 7ff70abac3..ae695a07e9 100644
--- a/src/network/ssl/qsslsocket.cpp
+++ b/src/network/ssl/qsslsocket.cpp
@@ -2621,18 +2621,19 @@ QSharedPointer<QSslContext> QSslSocketPrivate::sslContext(QSslSocket *socket)
bool QSslSocketPrivate::isMatchingHostname(const QSslCertificate &cert, const QString &peerName)
{
- QStringList commonNameList = cert.subjectInfo(QSslCertificate::CommonName);
+ const QString lowerPeerName = peerName.toLower();
+ const QStringList commonNames = cert.subjectInfo(QSslCertificate::CommonName);
- foreach (const QString &commonName, commonNameList) {
- if (isMatchingHostname(commonName.toLower(), peerName.toLower())) {
+ for (const QString &commonName : commonNames) {
+ if (isMatchingHostname(commonName.toLower(), lowerPeerName))
return true;
- }
}
- foreach (const QString &altName, cert.subjectAlternativeNames().values(QSsl::DnsEntry)) {
- if (isMatchingHostname(altName.toLower(), peerName.toLower())) {
+ const auto subjectAlternativeNames = cert.subjectAlternativeNames();
+ const auto altNames = subjectAlternativeNames.equal_range(QSsl::DnsEntry);
+ for (auto it = altNames.first; it != altNames.second; ++it) {
+ if (isMatchingHostname(it->toLower(), lowerPeerName))
return true;
- }
}
return false;