Firefox · SpiderMonkey
CVE-2026-8391
Logic Error in SpiderMonkey
Overview
High
Severity
—
CVSS
No
Exploited ITW
Fixed
Fix Status
Files Changed
js/src/jit/CodeGenerator.cppjs/src/vm/NativeObject.cpp
Patch
diff --git a/js/src/jit/CodeGenerator.cpp b/js/src/jit/CodeGenerator.cpp
index 390582fdceb..2a9094a4105 100644
--- a/js/src/jit/CodeGenerator.cpp
+++ b/js/src/jit/CodeGenerator.cpp
@@ -18462,6 +18462,9 @@ void CodeGenerator::visitLoadSlotByIteratorIndexCommon(Register object,
masm.bind(&indexOkay);
masm.loadValue(BaseObjectElementIndex(kindScratch, indexScratch), result);
+ masm.branchTestMagicValue(Assembler::NotEqual, result, JS_ELEMENTS_HOLE,
+ &done);
+ masm.assumeUnreachable("Dense element is a hole");
masm.bind(&done);
}
diff --git a/js/src/vm/NativeObject.cpp b/js/src/vm/NativeObject.cpp
index 9b580c6bcaa..a665f987536 100644
--- a/js/src/vm/NativeObject.cpp
+++ b/js/src/vm/NativeObject.cpp
@@ -1221,6 +1221,17 @@ static MOZ_ALWAYS_INLINE bool CallAddPropertyHook(JSContext* cx,
Handle<NativeObject*> obj,
HandleId id,
HandleValue value) {
+ // Inline addProperty for array objects.
+ if (obj->is<ArrayObject>()) {
+ ArrayObject* arr = &obj->as<ArrayObject>();
+ uint32_t length = arr->length();
+ uint32_t index;
+ if (IdIsIndex(id, &index) && index >= length) {
+ arr->setLength(cx, index + 1);
+ }
+ return true;
+ }
+
// Ensure any wrapper is preserved first.
if (!PreserveAnyUnpreservedWrapper(cx, obj)) {
return false;
Loading diff…
References
On This Page