From a13d84b56a2f02be71aca376ccdba39a7a38ef86 Mon Sep 17 00:00:00 2001 From: Piotr Wiercinski Date: Wed, 14 May 2025 21:53:15 +0200 Subject: [PATCH] wasm: Fix parsing HTTP header values that contain colon (:) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- src/network/access/qnetworkreplywasmimpl.cpp | 16 +++++++++------- 1 file 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 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(headerIndex), (QVariant)headersValue); + q->setHeader(static_cast(headerIndex), + (QVariant)headerValue); } } }