diff options
| author | Thiago Macieira <thiago.macieira@intel.com> | 2024-02-15 15:28:58 -0800 |
|---|---|---|
| committer | Thiago Macieira <thiago.macieira@intel.com> | 2024-04-18 14:35:09 -0700 |
| commit | c25541e9ac4c7021c69c600906e5ca8c80f18401 (patch) | |
| tree | b24d9e1b71630e1989cd2ccd53d94e80940243db /src/corelib/serialization/qxmlstream.cpp | |
| parent | 94c62e322264e2e7d61193ae74ba8556a330385c (diff) | |
QXmlStreamWriter: fix attempts to write bad QStrings
We weren't doing the decoding from UTF-16 to UTF-32, so weren't catching
invalid code sequences
[ChangeLog][QtCore][QXmlStreamWriter] The class now rejects writing
UTF-8 and UTF-16 invalid input (improper code unit sequences).
Task-number: QTBUG-122241
Pick-to: 6.5 6.6 6.7
Change-Id: I83dda2d36c904517b3c0fffd17b42d17c637fdc4
Reviewed-by: Mate Barany <mate.barany@qt.io>
Diffstat (limited to 'src/corelib/serialization/qxmlstream.cpp')
| -rw-r--r-- | src/corelib/serialization/qxmlstream.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/corelib/serialization/qxmlstream.cpp b/src/corelib/serialization/qxmlstream.cpp index f0fad77a085..0fe8c87779a 100644 --- a/src/corelib/serialization/qxmlstream.cpp +++ b/src/corelib/serialization/qxmlstream.cpp @@ -22,6 +22,7 @@ #include "qxmlstream_p.h" #include "qxmlstreamparser_p.h" #include <private/qstringconverter_p.h> +#include <private/qstringiterator_p.h> QT_BEGIN_NAMESPACE @@ -2978,9 +2979,12 @@ void QXmlStreamWriterPrivate::writeEscaped(QAnyStringView s, bool escapeWhitespa } }; struct NextUtf16 { - char32_t operator()(const QChar *&it, const QChar *) const + char32_t operator()(const QChar *&it, const QChar *end) const { - return (it++)->unicode(); + QStringIterator decoder(it, end); + char32_t result = decoder.next(u'\0'); + it = decoder.position(); + return result; } }; |
