Bug 1108007 - Don't allow GC to observe uninitialized elements in cloned array r=nbp
This commit is contained in:
@@ -1789,12 +1789,8 @@ js::DeepCloneObjectLiteral(JSContext *cx, HandleNativeObject obj, NewObjectKind
|
||||
if (!clone || !clone->ensureElements(cx, obj->getDenseCapacity()))
|
||||
return nullptr;
|
||||
|
||||
// Copy the number of initialized elements.
|
||||
uint32_t initialized = obj->getDenseInitializedLength();
|
||||
if (initialized)
|
||||
clone->setDenseInitializedLength(initialized);
|
||||
|
||||
// Recursive copy of dense element.
|
||||
uint32_t initialized = obj->getDenseInitializedLength();
|
||||
for (uint32_t i = 0; i < initialized; ++i) {
|
||||
v = obj->getDenseElement(i);
|
||||
if (v.isObject()) {
|
||||
@@ -1806,6 +1802,7 @@ js::DeepCloneObjectLiteral(JSContext *cx, HandleNativeObject obj, NewObjectKind
|
||||
}
|
||||
v.setObject(*deepObj);
|
||||
}
|
||||
clone->setDenseInitializedLength(i + 1);
|
||||
clone->initDenseElement(i, v);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user