From cec5066f322609c39040d53e314021600e50027b Mon Sep 17 00:00:00 2001 From: Ahmad Samir Date: Tue, 22 Apr 2025 22:23:32 +0200 Subject: [PATCH] qdataurl: treat comma as mandatory in the data URL syntax In the syntax specified in https://www.rfc-editor.org/rfc/rfc2397.html: data:[][;base64], The comma isn't inside square brackets, so not optional. Change the unittests accordingly, "data:text/plain" isn't empty data, it's rather malformed. [ChangeLog][QtCore] Changed parsing 'data:' URLs to report failure if the comma is missing, this makes it more compliant with RFC 2397. [ChangeLog][QtNetwork][QNetworkManager] Changed parsing 'data:' URLs to report failure if the comma is missing, this makes it more compliant RFC 2397. Change-Id: I91c45f42257de7840ab45c0f8eb31b8df3d483bc Reviewed-by: Thiago Macieira --- src/corelib/io/qdataurl.cpp | 3 ++- tests/auto/corelib/io/qdataurl/tst_qdataurl.cpp | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/corelib/io/qdataurl.cpp b/src/corelib/io/qdataurl.cpp index 2d2426e8ea5..208a432e7a6 100644 --- a/src/corelib/io/qdataurl.cpp +++ b/src/corelib/io/qdataurl.cpp @@ -56,9 +56,10 @@ Q_CORE_EXPORT bool qDecodeDataUrl(const QUrl &uri, QString &mimeType, QByteArray mimeType = textPlain + QLatin1StringView(data.trimmed()); else mimeType = QStringLiteral("text/plain;charset=US-ASCII"); + return true; } - return true; + return false; } QT_END_NAMESPACE diff --git a/tests/auto/corelib/io/qdataurl/tst_qdataurl.cpp b/tests/auto/corelib/io/qdataurl/tst_qdataurl.cpp index 39d860adaf7..9c2276d99fa 100644 --- a/tests/auto/corelib/io/qdataurl/tst_qdataurl.cpp +++ b/tests/auto/corelib/io/qdataurl/tst_qdataurl.cpp @@ -31,7 +31,7 @@ void tst_QDataUrl::decode_data() row("malformed-host", "data://test.com", false); row("malformed-host2", "data://text/plain;charset=ISO-8859-1", false); row("malformed-host3", "data://test.com/,", false); - row("emptyData", "data:text/plain", true); + row("malformed-no-comma", "data:text/plain", false); row("emptyData-default-mimetype", "data:,", true, "text/plain;charset=US-ASCII"_L1, ""); row("emptyData-only-charset", "data:charset=ISO-8859-1,", true,