From 838a2fde28b648e59ab4d921cf96241ac5203fe8 Mon Sep 17 00:00:00 2001 From: Juha Vuolle Date: Mon, 17 Jun 2024 18:03:34 +0300 Subject: [PATCH] Extract Method for escaping name/filename multipart parameters Task-number: QTBUG-125985 Change-Id: Iab10e7a198d883d66c9862073c737f7e703eddb6 Reviewed-by: Marc Mutz (cherry picked from commit 14a59bf0bfe7add2b6f5810e49cea77bfe0fba1f) Reviewed-by: Qt Cherry-pick Bot --- src/network/access/qformdatabuilder.cpp | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/network/access/qformdatabuilder.cpp b/src/network/access/qformdatabuilder.cpp index 24da07fcb2..c0d9ce64ae 100644 --- a/src/network/access/qformdatabuilder.cpp +++ b/src/network/access/qformdatabuilder.cpp @@ -46,6 +46,15 @@ static QByteArray nameToByteArray(QUtf8StringView view) return QByteArray::fromRawData(view.data(), view.size()); } +static void escapeNameAndAppend(QByteArray &dst, QByteArrayView src) +{ + for (auto c : src) { + if (c == '"' || c == '\\') + dst += '\\'; + dst += c; + } +} + /*! Constructs a QFormDataPartBuilder object and sets \a name as the name parameter of the form-data. @@ -58,11 +67,7 @@ QFormDataPartBuilder::QFormDataPartBuilder(QAnyStringView name, PrivateConstruct const auto enc = name.visit([](auto name) { return nameToByteArray(name); }); m_headerValue += "form-data; name=\""; - for (auto c : enc) { - if (c == '"' || c == '\\') - m_headerValue += '\\'; - m_headerValue += c; - } + escapeNameAndAppend(m_headerValue, enc); m_headerValue += "\""; } @@ -203,11 +208,7 @@ QHttpPart QFormDataPartBuilder::build() const bool utf8 = !QtPrivate::isAscii(m_originalBodyName); const auto enc = utf8 ? m_originalBodyName.toUtf8() : m_originalBodyName.toLatin1(); m_headerValue += "; filename=\""; - for (auto c : enc) { - if (c == '"' || c == '\\') - m_headerValue += '\\'; - m_headerValue += c; - } + escapeNameAndAppend(m_headerValue, enc); m_headerValue += "\""; if (utf8) { // For 'filename*' production see