summaryrefslogtreecommitdiffstats
path: root/src/network/kernel
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@kdab.com>2020-04-25 17:58:03 +0200
committerMarc Mutz <marc.mutz@kdab.com>2020-04-29 22:31:25 +0000
commit68a20d69419671f28990052aca4c89a52ee78046 (patch)
tree7cffc31cf03399d1b18ef561aca5e75162149cc6 /src/network/kernel
parent0daed8dee82d29be1dbf39046b0d4a0814e08d08 (diff)
QNetworkProxy: don't allocate when parsing [1/2]: loop body
Instead of manipulating a QByteArray, do it with a QLatin1String, which is free. Also, don't prepend a dot to force matches at label boundaries, check that there's a dot where the match occurred. Saves two allocations per iteration. Finally, pull the query's peerHostName() initialization out of the loop - it doesn't depend on the loop variable. Change-Id: I6dfdae711f0bd8941af69bfbcfda7873a40e4b80 Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
Diffstat (limited to 'src/network/kernel')
-rw-r--r--src/network/kernel/qnetworkproxy_generic.cpp30
1 files changed, 17 insertions, 13 deletions
diff --git a/src/network/kernel/qnetworkproxy_generic.cpp b/src/network/kernel/qnetworkproxy_generic.cpp
index 3ff0cc5168..d2c7b29bc4 100644
--- a/src/network/kernel/qnetworkproxy_generic.cpp
+++ b/src/network/kernel/qnetworkproxy_generic.cpp
@@ -57,30 +57,34 @@ static bool ignoreProxyFor(const QNetworkProxyQuery &query)
if (noProxy.isEmpty())
return false;
+ const QString host = query.peerHostName();
+
const QList<QByteArray> noProxyTokens = noProxy.split(',');
for (const QByteArray &rawToken : noProxyTokens) {
- QByteArray token = rawToken.trimmed();
- QString peerHostName = query.peerHostName();
+ auto token = QLatin1String(rawToken).trimmed();
// Since we use suffix matching, "*" is our 'default' behaviour
- if (token.startsWith('*'))
+ if (token.startsWith(u'*'))
token = token.mid(1);
// Harmonize trailing dot notation
- if (token.endsWith('.') && !peerHostName.endsWith('.'))
- token = token.left(token.length()-1);
+ if (token.endsWith(u'.') && !host.endsWith(u'.'))
+ token = token.chopped(1);
+
+ if (token.startsWith(u'.')) // leading dot is implied
+ token = token.mid(1);
- // We prepend a dot to both values, so that when we do a suffix match,
- // we don't match "donotmatch.com" with "match.com"
- if (!token.startsWith('.'))
- token.prepend('.');
+ if (host.endsWith(token)) {
- if (!peerHostName.startsWith('.'))
- peerHostName.prepend('.');
+ // Make sure that when we have a suffix match,
+ // we don't match "donotmatch.com" with "match.com"
- if (peerHostName.endsWith(QLatin1String(token)))
- return true;
+ if (host.size() == token.size()) // iow: host == token
+ return true;
+ if (host[host.size() - token.size() - 1] == u'.') // match follows a dot
+ return true;
+ }
}
return false;