diff --git a/src/corelib/io/qdataurl.cpp b/src/corelib/io/qdataurl.cpp index 65b934b3f67..c5ecca8fb82 100644 --- a/src/corelib/io/qdataurl.cpp +++ b/src/corelib/io/qdataurl.cpp @@ -47,10 +47,10 @@ Q_CORE_EXPORT bool qDecodeDataUrl(const QUrl &uri, QString &mimeType, QByteArray QLatin1StringView textPlain; constexpr auto charset = "charset"_L1; if (QLatin1StringView{data}.startsWith(charset, Qt::CaseInsensitive)) { - qsizetype i = charset.size(); - while (data.at(i) == ' ') - ++i; - if (data.at(i) == '=') + QByteArrayView copy = data.sliced(charset.size()); + while (copy.startsWith(' ')) + copy.slice(1); + if (copy.startsWith('=')) textPlain = "text/plain;"_L1; } diff --git a/tests/auto/corelib/io/qdataurl/tst_qdataurl.cpp b/tests/auto/corelib/io/qdataurl/tst_qdataurl.cpp index e694a791015..943b168e056 100644 --- a/tests/auto/corelib/io/qdataurl/tst_qdataurl.cpp +++ b/tests/auto/corelib/io/qdataurl/tst_qdataurl.cpp @@ -34,6 +34,8 @@ void tst_QDataUrl::decode_data() "text/plain"_L1, QByteArray::fromPercentEncoding("%E2%88%9A")); row("everythingIsCaseInsensitive", "Data:texT/PlaiN;charSet=iSo-8859-1;Base64,SGVsbG8=", true, "texT/PlaiN;charSet=iSo-8859-1"_L1, QByteArrayLiteral("Hello")); + row("prematureCharsetEnd", "data:charset,", true, + "charset", ""); // nonsense result, but don't crash } void tst_QDataUrl::decode()