Firefox · DOM
CVE-2025-11712
Logic Error in DOM
Overview
Medium
Severity
—
CVSS
No
Exploited ITW
Fixed
Fix Status
Files Changed
dom/base/nsObjectLoadingContent.cppmodules/libpref/init/StaticPrefList.yaml
Patch
diff --git a/dom/base/nsObjectLoadingContent.cpp b/dom/base/nsObjectLoadingContent.cpp
index ae0dc8a0256..21c5b9eeeae 100644
--- a/dom/base/nsObjectLoadingContent.cpp
+++ b/dom/base/nsObjectLoadingContent.cpp
@@ -698,7 +698,6 @@ nsObjectLoadingContent::UpdateObjectParameters() {
nsresult rv;
nsAutoCString newMime;
- nsAutoString typeAttr;
nsCOMPtr<nsIURI> newURI;
nsCOMPtr<nsIURI> newBaseURI;
ObjectType newType;
@@ -726,7 +725,6 @@ nsObjectLoadingContent::UpdateObjectParameters() {
el->HasNonEmptyAttr(nsGkAtoms::classid)) {
// We don't support class ID plugin references, so we should always treat
// having class Ids as attributes as invalid, and fallback accordingly.
- newMime.Truncate();
stateInvalid = true;
}
@@ -756,16 +754,6 @@ nsObjectLoadingContent::UpdateObjectParameters() {
newBaseURI = docBaseURI;
}
- nsAutoString rawTypeAttr;
- el->GetAttr(nsGkAtoms::type, rawTypeAttr);
- if (!rawTypeAttr.IsEmpty()) {
- typeAttr = rawTypeAttr;
- nsAutoString params;
- nsAutoString mime;
- nsContentUtils::SplitMimeType(rawTypeAttr, mime, params);
- CopyUTF16toUTF8(mime, newMime);
- }
-
///
/// URI
///
@@ -800,6 +788,34 @@ nsObjectLoadingContent::UpdateObjectParameters() {
}
}
+ ///
+ /// type
+ ///
+ nsAutoString rawTypeAttr;
+ el->GetAttr(nsGkAtoms::type, rawTypeAttr);
+ // YouTube embeds might be using type="application/x-shockwave-flash"
+ // which needs to be allowed, but must not override the text/html MIME set
+ // above.
+ if (!mRewrittenYoutubeEmbed && !rawTypeAttr.IsEmpty()) {
+ nsAutoString params;
+ nsAutoString mime;
+ nsContentUtils::SplitMimeType(rawTypeAttr, mime, params);
+
+ if (!StaticPrefs::dom_object_embed_type_hint_enabled()) {
+ NS_ConvertUTF16toUTF8 mimeUTF8(mime);
+ if (GetTypeOfContent(mimeUTF8) != ObjectType::Document) {
+ LOG(
+ ("OBJLC [%p]: MIME '%s' from type attribute is not supported, "
+ "forcing fallback.",
+ this, mimeUTF8.get()));
+ stateInvalid = true;
+ }
+ // Don't use the type attribute as a Content-Type hint.
+ } else {
+ CopyUTF16toUTF8(mime, newMime);
+ }
+ }
+
///
/// Check if the original (pre-channel) content-type or URI changed, and
/// record mOriginal{ContentType,URI}
diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml
index b821534f587..abbd0b29636 100644
--- a/modules/libpref/init/StaticPrefList.yaml
+++ b/modules/libpref/init/StaticPrefList.yaml
@@ -3703,6 +3703,13 @@
value: false
mirror: always
+# Whether the type attribute in an <object> is used as a hint for the Content-Type
+# of the loading document.
+- name: dom.object_embed.type_hint.enabled
+ type: bool
+ value: false
+ mirror: always
+
# Whether origin trials are enabled.
- name: dom.origin-trials.enabled
type: bool
Loading diff…
References
On This Page