summaryrefslogtreecommitdiffstats
path: root/src/network/access/qnetworkreplywasmimpl.cpp
diff options
context:
space:
mode:
authorPiotr Wiercinski <piotr.wiercinski@qt.io>2025-05-14 21:53:15 +0200
committerPiotr Wierciński <piotr.wiercinski@qt.io>2025-05-19 16:03:29 +0000
commita13d84b56a2f02be71aca376ccdba39a7a38ef86 (patch)
tree4030ca2d69602311beec526eae59968ce3c28da7 /src/network/access/qnetworkreplywasmimpl.cpp
parenta65554044cc9fae09e189cf4d6dcd09f4e918f6d (diff)
wasm: Fix parsing HTTP header values that contain colon (:)
According to RFC 7230 header values can contain colon(:). Fix parsing HTTP headers to handle such cases correctly. Fixes: QTBUG-136812 Pick-to: 6.5 6.8 6.9 Change-Id: I371342c5d84744e0427eb23fb1b648f8c0f0c9fe Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
Diffstat (limited to 'src/network/access/qnetworkreplywasmimpl.cpp')
-rw-r--r--src/network/access/qnetworkreplywasmimpl.cpp16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/network/access/qnetworkreplywasmimpl.cpp b/src/network/access/qnetworkreplywasmimpl.cpp
index 1bcf32e643a..64033387912 100644
--- a/src/network/access/qnetworkreplywasmimpl.cpp
+++ b/src/network/access/qnetworkreplywasmimpl.cpp
@@ -426,20 +426,22 @@ void QNetworkReplyWasmImplPrivate::headersReceived(const QByteArray &buffer)
if (!buffer.isEmpty()) {
QList<QByteArray> headers = buffer.split('\n');
- for (int i = 0; i < headers.size(); i++) {
- if (headers.at(i).contains(':')) { // headers include final \x00, so skip
- QByteArray headerName = headers.at(i).split(':').at(0).trimmed();
- QByteArray headersValue = headers.at(i).split(':').at(1).trimmed();
+ for (auto &&header : headers) {
+ if (auto splitPos = header.indexOf(':');
+ splitPos != -1) { // headers include final \x00, so skip
+ auto headerName = header.first(splitPos).trimmed();
+ auto headerValue = header.sliced(splitPos + 1).trimmed();
- if (headerName.isEmpty() || headersValue.isEmpty())
+ if (headerName.isEmpty() || headerValue.isEmpty())
continue;
int headerIndex = parseHeaderName(headerName);
if (headerIndex == -1)
- q->setRawHeader(headerName, headersValue);
+ q->setRawHeader(headerName, headerValue);
else
- q->setHeader(static_cast<QNetworkRequest::KnownHeaders>(headerIndex), (QVariant)headersValue);
+ q->setHeader(static_cast<QNetworkRequest::KnownHeaders>(headerIndex),
+ (QVariant)headerValue);
}
}
}