summaryrefslogtreecommitdiffstats
path: root/src/corelib/io/qurl.cpp
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2023-01-12 08:07:52 -0800
committerThiago Macieira <thiago.macieira@intel.com>2023-01-17 16:51:53 -0800
commita14a3a5487675a231b912e9a5ae575357d1c2cf8 (patch)
treeddba4a0533352195941d53e7cde3a932743b6d91 /src/corelib/io/qurl.cpp
parenta26d25be7b782d35a0b03b38dd0785188e1228e1 (diff)
QUrl: restore empty-but-not-null for components that are present
This got lost during the QStringView port that happend in Qt 6.0 (commit 548dcef08976649c820054f3db1ad108c72439cd) because QString::operator+=(QStringView) does not copy the nullness of the right side, whereas QString::operator+=(const QString &) does. Pick-to: 6.2 6.4 6.5 Fixes: QTBUG-84315 Change-Id: Ide4dbd0777a44ed0870efffd17399b772d34fd55 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
Diffstat (limited to 'src/corelib/io/qurl.cpp')
-rw-r--r--src/corelib/io/qurl.cpp14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp
index f925b2c901..0d42a78422 100644
--- a/src/corelib/io/qurl.cpp
+++ b/src/corelib/io/qurl.cpp
@@ -818,14 +818,16 @@ recodeFromUser(const QString &input, const ushort *actions, qsizetype from, qsiz
static inline void appendToUser(QString &appendTo, QStringView value, QUrl::FormattingOptions options,
const ushort *actions)
{
- // Test ComponentFormattingOptions, ignore FormattingOptions.
- if ((options & 0xFFFF0000) == QUrl::PrettyDecoded) {
+ // The stored value is already QUrl::PrettyDecoded, so there's nothing to
+ // do if that's what the user asked for (test only
+ // ComponentFormattingOptions, ignore FormattingOptions).
+ if ((options & 0xFFFF0000) == QUrl::PrettyDecoded ||
+ !qt_urlRecode(appendTo, value, options, actions))
appendTo += value;
- return;
- }
- if (!qt_urlRecode(appendTo, value, options, actions))
- appendTo += value;
+ // copy nullness, if necessary, because QString::operator+=(QStringView) doesn't
+ if (appendTo.isNull() && !value.isNull())
+ appendTo.detach();
}
inline void QUrlPrivate::appendAuthority(QString &appendTo, QUrl::FormattingOptions options, Section appendingTo) const