Skip to content
This repository was archived by the owner on Jul 9, 2025. It is now read-only.

Commit 109e8c7

Browse files
committed
Bug 1670540 - Transplant DOM_OBJECT_SLOT2 in shell. r=jandem
Differential Revision: https://phabricator.services.mozilla.com/D93213
1 parent 1bc435d commit 109e8c7

2 files changed

Lines changed: 12 additions & 0 deletions

File tree

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// Make sure to transplant DOM_OBJECT_SLOT2 for FakeDOMObject
2+
let source = new FakeDOMObject();
3+
assertEq(source.slot, 42);
4+
let {object: target, transplant} = transplantableObject({object: source});
5+
transplant(this);
6+
assertEq(source.slot, 42);
7+
assertEq(target.slot, 42);

js/src/shell/js.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8415,6 +8415,11 @@ static bool TransplantObject(JSContext* cx, unsigned argc, Value* vp) {
84158415
JS::SetReservedSlot(target, DOM_OBJECT_SLOT,
84168416
JS::GetReservedSlot(source, DOM_OBJECT_SLOT));
84178417
JS::SetReservedSlot(source, DOM_OBJECT_SLOT, JS::PrivateValue(nullptr));
8418+
if (JS::GetClass(source) == GetDomClass()) {
8419+
JS::SetReservedSlot(target, DOM_OBJECT_SLOT2,
8420+
JS::GetReservedSlot(source, DOM_OBJECT_SLOT2));
8421+
JS::SetReservedSlot(source, DOM_OBJECT_SLOT2, UndefinedValue());
8422+
}
84188423

84198424
source = JS_TransplantObject(cx, source, target);
84208425
if (!source) {

0 commit comments

Comments
 (0)