From 038c199d59ff5e9e16fe2a010f3f1f55764cf5ba Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Sun, 21 Apr 2024 14:12:48 -0700 Subject: [PATCH] QMimeData: fix setData on URI list without ending CRLF Commit 8d127c57376e48dd49afe62cfb8e714d26759a69 refactored this code from QByteArray::split to manually iterate over the list (and QStringTokenizer doesn't work for QByteArray), so we missed the last element in the iteration. Pick-to: 6.7 Fixes: QTBUG-124580 Change-Id: I455fe22ef4ad4b2f9b01fffd17c867f6ed350af7 Reviewed-by: Ahmad Samir Reviewed-by: David Faure --- src/corelib/kernel/qmimedata.cpp | 5 +++++ tests/auto/corelib/kernel/qmimedata/tst_qmimedata.cpp | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/src/corelib/kernel/qmimedata.cpp b/src/corelib/kernel/qmimedata.cpp index 1348c70b1ac..2c0a89dbd7c 100644 --- a/src/corelib/kernel/qmimedata.cpp +++ b/src/corelib/kernel/qmimedata.cpp @@ -90,6 +90,11 @@ static QList dataToUrls(QByteArrayView text) if (from >= text.size()) break; } + if (from != text.size()) { + const auto bav = QByteArrayView(begin + from, text.end()).trimmed(); + if (!bav.isEmpty()) + list.push_back(QUrl::fromEncoded(bav)); + } return list; } diff --git a/tests/auto/corelib/kernel/qmimedata/tst_qmimedata.cpp b/tests/auto/corelib/kernel/qmimedata/tst_qmimedata.cpp index c9c87343538..e28a2e98ccb 100644 --- a/tests/auto/corelib/kernel/qmimedata/tst_qmimedata.cpp +++ b/tests/auto/corelib/kernel/qmimedata/tst_qmimedata.cpp @@ -85,6 +85,14 @@ void tst_QMimeData::data() const QCOMPARE(mimeData.data("text/markdown"), QByteArray("vikings")); QCOMPARE(mimeData.data("text/html"), QByteArray("ninjas")); QCOMPARE(mimeData.data("text/plain"), QByteArray("pirates")); + + // URI list + QByteArray list = "https://example.com/\r\nhttps://example.net/\r\nhttps://example.org/\r\n"; + mimeData.setData("text/uri-list", list); + QCOMPARE(mimeData.data("text/uri-list"), list); + + mimeData.setData("text/uri-list", list.chopped(2)); // without the ending CRLF + QCOMPARE(mimeData.data("text/uri-list"), list); } void tst_QMimeData::formats() const