diff options
| author | Piotr Wiercinski <piotr.wiercinski@qt.io> | 2025-05-14 21:53:15 +0200 |
|---|---|---|
| committer | Piotr Wierciński <piotr.wiercinski@qt.io> | 2025-05-19 16:03:29 +0000 |
| commit | a13d84b56a2f02be71aca376ccdba39a7a38ef86 (patch) | |
| tree | 4030ca2d69602311beec526eae59968ce3c28da7 /src/network/access/qnetworkreplywasmimpl.cpp | |
| parent | a65554044cc9fae09e189cf4d6dcd09f4e918f6d (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.cpp | 16 |
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); } } } |
