diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2022-11-16 13:28:04 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2022-11-23 14:09:24 +0000 |
commit | 1cab37091261174e5586cbaf754a7c8a404bcf7a (patch) | |
tree | 5b5c894e416e3d7ca2086e4c9ca5742516730acf | |
parent | 7b8d7df089a7105a89fd7fd049f06318843106a0 (diff) |
Simplify mime-type list
A complex list of mime-types seems to confuse Discord, and this also
lowers our entropy leak.
Fixes: QTBUG-108265
Change-Id: Ic33d908c4d3c5efe93b086c7b52f39d81a748b32
Reviewed-by: Szabolcs David <davidsz@inf.u-szeged.hu>
(cherry picked from commit 51c46bc99b2a8f1d3eda2ee3e8d7ebc3fc7fea3f)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | src/core/clipboard_qt.cpp | 46 |
1 files changed, 27 insertions, 19 deletions
diff --git a/src/core/clipboard_qt.cpp b/src/core/clipboard_qt.cpp index 69690dd99..009235a72 100644 --- a/src/core/clipboard_qt.cpp +++ b/src/core/clipboard_qt.cpp @@ -198,9 +198,11 @@ bool ClipboardQt::IsFormatAvailable(const ui::ClipboardFormatType &format, const QMimeData *mimeData = QGuiApplication::clipboard()->mimeData( type == ui::ClipboardBuffer::kCopyPaste ? QClipboard::Clipboard : QClipboard::Selection); - if (format == ui::ClipboardFormatType::BitmapType()) - return mimeData && mimeData->hasImage(); - return mimeData && mimeData->hasFormat(QString::fromStdString(format.GetName())); + if (!mimeData) + return false; + if (format == ui::ClipboardFormatType::PngType()) + return mimeData->hasImage(); + return mimeData->hasFormat(QString::fromStdString(format.GetName())); } void ClipboardQt::Clear(ui::ClipboardBuffer type) @@ -224,18 +226,13 @@ void ClipboardQt::ReadAvailableTypes(ui::ClipboardBuffer type, type == ui::ClipboardBuffer::kCopyPaste ? QClipboard::Clipboard : QClipboard::Selection); if (!mimeData) return; - if (mimeData->hasImage() && !mimeData->formats().contains(QStringLiteral("image/png"))) - types->push_back(toString16(QStringLiteral("image/png"))); - const QStringList formats = mimeData->formats(); - for (const QString &mimeType : formats) { - // Special handling for chromium/x-web-custom-data. We must read the data - // and deserialize it to find the list of mime types to report. - if (mimeType == QString::fromLatin1(ui::kMimeTypeWebCustomData)) { - const QByteArray customData = mimeData->data(QString::fromLatin1(ui::kMimeTypeWebCustomData)); - ui::ReadCustomDataTypes(customData.constData(), customData.size(), types); - } else { - types->push_back(toString16(mimeType)); - } + + for (const auto& mime_type : GetStandardFormats(type, data_dst)) + types->push_back(mime_type); + + if (mimeData->hasFormat(QString::fromLatin1(ui::kMimeTypeWebCustomData))) { + const QByteArray customData = mimeData->data(QString::fromLatin1(ui::kMimeTypeWebCustomData)); + ui::ReadCustomDataTypes(customData.constData(), customData.size(), types); } } @@ -438,12 +435,23 @@ std::vector<std::u16string> ClipboardQt::GetStandardFormats(ui::ClipboardBuffer return {}; std::vector<std::u16string> types; + if (mimeData->hasImage()) + types.push_back(base::UTF8ToUTF16(ui::kMimeTypePNG)); + if (mimeData->hasHtml()) + types.push_back(base::UTF8ToUTF16(ui::kMimeTypeHTML)); + if (mimeData->hasText()) + types.push_back(base::UTF8ToUTF16(ui::kMimeTypeText)); + if (mimeData->hasUrls()) + types.push_back(base::UTF8ToUTF16(ui::kMimeTypeURIList)); const QStringList formats = mimeData->formats(); - if (mimeData->hasImage() && !formats.contains(QStringLiteral("image/png"))) - types.push_back(toString16(QStringLiteral("image/png"))); for (const QString &mimeType : formats) { - if (mimeType != QString::fromLatin1(ui::kMimeTypeWebCustomData)) - types.push_back(toString16(mimeType)); + auto mime_type = mimeType.toStdString(); + // Only add white-listed formats here + if (mime_type == ui::ClipboardFormatType::SvgType().GetName() || + mime_type == ui::ClipboardFormatType::RtfType().GetName()) { + types.push_back(base::UTF8ToUTF16(mime_type)); + continue; + } } return types; } |