diff --git a/src/corelib/serialization/qxmlstream.cpp b/src/corelib/serialization/qxmlstream.cpp index 50f87900161..182f3d7e1e8 100644 --- a/src/corelib/serialization/qxmlstream.cpp +++ b/src/corelib/serialization/qxmlstream.cpp @@ -572,6 +572,7 @@ void QXmlStreamReader::addData(QAnyStringView data) } else if constexpr (std::is_same_v) { // Conversion to a QString is required, to avoid breaking // pre-existing (before porting to QAnyStringView) behavior. + d->lockEncoding = true; if (!d->decoder.isValid()) d->decoder = QStringDecoder(QStringDecoder::Utf8); addDataImpl(QString::fromLatin1(data).toUtf8()); diff --git a/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp b/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp index d40cb8fa8d0..d0821781222 100644 --- a/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp +++ b/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp @@ -568,6 +568,7 @@ private slots: void readFromQBuffer() const; void readFromQBufferInvalid() const; void readFromLatin1String() const; + void readLatin1Document() const; void readNextStartElement() const; void readElementText() const; void readElementText_data() const; @@ -1229,6 +1230,25 @@ void tst_QXmlStream::readFromLatin1String() const } } +void tst_QXmlStream::readLatin1Document() const +{ + const auto in = "M\xE5rten"_L1; + { + QXmlStreamReader reader(in); + QVERIFY(reader.readNextStartElement()); + QString text = reader.readElementText(); + QCOMPARE(text, "M\xE5rten"_L1); + } + // Same as above, but with addData(), QTBUG-135033 + { + QXmlStreamReader reader; + reader.addData(in); + QVERIFY(reader.readNextStartElement()); + QString text = reader.readElementText(); + QCOMPARE(text, "M\xE5rten"_L1); + } +} + void tst_QXmlStream::readNextStartElement() const { QLatin1String in("text");