summaryrefslogtreecommitdiffstats
path: root/src/corelib/serialization/qxmlstream.cpp
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@qt.io>2022-12-12 16:11:19 +0100
committerMarc Mutz <marc.mutz@qt.io>2022-12-16 22:58:11 +0100
commit4ccb10dc918c3d4d01afa1ad718a24eb5fa49a3c (patch)
tree7299792f6525e073eab0192a84ff8703d84d85f9 /src/corelib/serialization/qxmlstream.cpp
parent26c190f57ea336106aeceffe1191a0314bb4443c (diff)
QXmlStreamWriter: fix a thinko in doWriteToDevice(QSV)
Check for state.remainingChars to signal an encoding error only after the last chunk has been processed. Splitting surrogates at chunk boundaries is normal operation, not an error. Only if this happens at the end of the whole input should we raise an error. Amends fa2153bd10057d7adbc5f5ededa1fd97c4a68161. Pick-to: 6.5 Change-Id: Id92e37becaed25bbc11e0c22dedc4d41fb23f92a Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/corelib/serialization/qxmlstream.cpp')
-rw-r--r--src/corelib/serialization/qxmlstream.cpp6
1 files changed, 2 insertions, 4 deletions
diff --git a/src/corelib/serialization/qxmlstream.cpp b/src/corelib/serialization/qxmlstream.cpp
index e68544b1cf5..b32d32c1a41 100644
--- a/src/corelib/serialization/qxmlstream.cpp
+++ b/src/corelib/serialization/qxmlstream.cpp
@@ -3069,13 +3069,11 @@ void QXmlStreamWriterPrivate::doWriteToDevice(QStringView s)
while (!s.isEmpty()) {
const qsizetype chunkSize = std::min(s.size(), MaxChunkSize);
char *end = QUtf8::convertFromUnicode(buffer, s.first(chunkSize), &state);
- if (state.remainingChars > 0) {
- hasEncodingError = true;
- return;
- }
doWriteToDevice(QUtf8StringView{buffer, end});
s = s.sliced(chunkSize);
}
+ if (state.remainingChars > 0)
+ hasEncodingError = true;
}
void QXmlStreamWriterPrivate::doWriteToDevice(QUtf8StringView s)