From 0ef4372cc766ed0042139fc330f152ddfdb63ca2 Mon Sep 17 00:00:00 2001 From: Edgar Chen Date: Fri, 31 Jul 2026 03:14:51 +0000 Subject: [PATCH] Bug 2057130 - Validate principal and filter type properly; r=tschuster Differential Revision: https://phabricator.services.mozilla.com/D315220 --- dom/base/nsContentUtils.cpp | 33 ++++++++++++++++++++++---- dom/ipc/ContentParent.cpp | 4 +--- widget/ClipboardWriteRequestParent.cpp | 4 +--- 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/dom/base/nsContentUtils.cpp b/dom/base/nsContentUtils.cpp index 98bfa6ba7bb2..76a8a581553e 100644 --- a/dom/base/nsContentUtils.cpp +++ b/dom/base/nsContentUtils.cpp @@ -113,6 +113,7 @@ #include "mozilla/Span.h" #include "mozilla/StaticAnalysisFunctions.h" #include "mozilla/StaticPrefs_browser.h" +#include "mozilla/StaticPrefs_clipboard.h" #include "mozilla/StaticPrefs_dom.h" #include "mozilla/StaticPrefs_network.h" #include "mozilla/dom/ReportDeliver.h" @@ -9819,11 +9820,33 @@ nsresult nsContentUtils::IPCTransferableDataToTransferable( nsresult rv; const nsTArray& items = aTransferableData.items(); for (const auto& item : items) { - if (aFilterUnknownFlavors && !IPCTransferableDataItemHasKnownFlavor(item)) { - NS_WARNING( - "Ignoring unknown flavor in " - "nsContentUtils::IPCTransferableDataToTransferable"); - continue; + if (aFilterUnknownFlavors) { + if (item.flavor().EqualsLiteral(kFilePromiseDirectoryMime)) { + NS_WARNING( + "Ignoring unknown flavor in " + "nsContentUtils::IPCTransferableDataToTransferable"); + continue; + } + + if ((item.flavor().EqualsLiteral(kFilePromiseMime) || + item.flavor().EqualsLiteral(kFilePromiseURLMime) || + item.flavor().EqualsLiteral(kFilePromiseDestFilename)) +#ifdef XP_WIN + && !StaticPrefs::clipboard_imageAsFile_enabled() +#endif + ) { + NS_WARNING( + "Ignoring unknown flavor in " + "nsContentUtils::IPCTransferableDataToTransferable"); + continue; + } + + if (!IPCTransferableDataItemHasKnownFlavor(item)) { + NS_WARNING( + "Ignoring unknown flavor in " + "nsContentUtils::IPCTransferableDataToTransferable"); + continue; + } } if (aAddDataFlavor) { diff --git a/dom/ipc/ContentParent.cpp b/dom/ipc/ContentParent.cpp index 0f55c0d04f44..578b77bec402 100644 --- a/dom/ipc/ContentParent.cpp +++ b/dom/ipc/ContentParent.cpp @@ -3275,9 +3275,7 @@ mozilla::ipc::IPCResult ContentParent::RecvSetClipboard( // aRequestingPrincipal is allowed to be nullptr here. if (!ValidatePrincipal(aTransferable.dataPrincipal(), - {ValidatePrincipalOptions::AllowNullPtr, - ValidatePrincipalOptions::AllowExpanded, - ValidatePrincipalOptions::AllowSystem})) { + {ValidatePrincipalOptions::AllowNullPtr})) { return PrincipalValidationIpcFail(aTransferable.dataPrincipal(), this, __func__); } diff --git a/widget/ClipboardWriteRequestParent.cpp b/widget/ClipboardWriteRequestParent.cpp index 15def65796be..9db2476a1030 100644 --- a/widget/ClipboardWriteRequestParent.cpp +++ b/widget/ClipboardWriteRequestParent.cpp @@ -59,9 +59,7 @@ IPCResult ClipboardWriteRequestParent::RecvSetData( const IPCTransferable& aTransferable) { if (!mManager->ValidatePrincipal( aTransferable.dataPrincipal(), - {dom::ValidatePrincipalOptions::AllowNullPtr, - dom::ValidatePrincipalOptions::AllowExpanded, - dom::ValidatePrincipalOptions::AllowSystem})) { + {dom::ValidatePrincipalOptions::AllowNullPtr})) { return ContentParent::PrincipalValidationIpcFail( aTransferable.dataPrincipal(), this, __func__); }