Skip to content

Commit e6e25c3

Browse files
committed
[MERGE #6014 @akroshg] VarIsImpl for Activationobect should include cross-site vtble checks as well
Merge pull request #6014 from akroshg:fix_5998
2 parents 0b281e7 + 3918240 commit e6e25c3

File tree

2 files changed

+24
-7
lines changed

2 files changed

+24
-7
lines changed

lib/Runtime/Types/ActivationObject.cpp

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,16 @@ namespace Js
1010
{
1111
template <> bool VarIsImpl<ActivationObject>(RecyclableObject* instance)
1212
{
13-
return VirtualTableInfo<Js::ActivationObject>::HasVirtualTable(instance) ||
14-
VirtualTableInfo<Js::ActivationObjectEx>::HasVirtualTable(instance) ||
15-
VirtualTableInfo<Js::PseudoActivationObject>::HasVirtualTable(instance) ||
16-
VirtualTableInfo<Js::BlockActivationObject>::HasVirtualTable(instance) ||
17-
VirtualTableInfo<Js::ConsoleScopeActivationObject>::HasVirtualTable(instance);
13+
return VirtualTableInfo<ActivationObject>::HasVirtualTable(instance) ||
14+
VirtualTableInfo<CrossSiteObject<ActivationObject>>::HasVirtualTable(instance) ||
15+
VirtualTableInfo<ActivationObjectEx>::HasVirtualTable(instance) ||
16+
VirtualTableInfo<CrossSiteObject<ActivationObjectEx>>::HasVirtualTable(instance) ||
17+
VirtualTableInfo<PseudoActivationObject>::HasVirtualTable(instance) ||
18+
VirtualTableInfo<CrossSiteObject<PseudoActivationObject>>::HasVirtualTable(instance) ||
19+
VirtualTableInfo<BlockActivationObject>::HasVirtualTable(instance) ||
20+
VirtualTableInfo<CrossSiteObject<BlockActivationObject>>::HasVirtualTable(instance) ||
21+
VirtualTableInfo<ConsoleScopeActivationObject>::HasVirtualTable(instance) ||
22+
VirtualTableInfo<CrossSiteObject<ConsoleScopeActivationObject>>::HasVirtualTable(instance);
1823
}
1924

2025
BOOL ActivationObject::HasOwnPropertyCheckNoRedecl(PropertyId propertyId)
@@ -172,7 +177,8 @@ namespace Js
172177

173178
template <> bool VarIsImpl<BlockActivationObject>(RecyclableObject* instance)
174179
{
175-
return VirtualTableInfo<Js::BlockActivationObject>::HasVirtualTable(instance);
180+
return VirtualTableInfo<Js::BlockActivationObject>::HasVirtualTable(instance) ||
181+
VirtualTableInfo<CrossSiteObject<BlockActivationObject>>::HasVirtualTable(instance);
176182
}
177183

178184
BOOL PseudoActivationObject::InitPropertyScoped(PropertyId propertyId, Var value)
@@ -211,7 +217,8 @@ namespace Js
211217

212218
template <> bool VarIsImpl<PseudoActivationObject>(RecyclableObject* instance)
213219
{
214-
return VirtualTableInfo<Js::PseudoActivationObject>::HasVirtualTable(instance);
220+
return VirtualTableInfo<Js::PseudoActivationObject>::HasVirtualTable(instance) ||
221+
VirtualTableInfo<CrossSiteObject<PseudoActivationObject>>::HasVirtualTable(instance);
215222
}
216223

217224
#if ENABLE_TTD

test/Bugs/misc_bugs.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,16 @@ var tests = [
155155
var obj2 = {__proto__ : p}; // This should not call the getPrototypeOf
156156
}
157157
},
158+
{
159+
name: "Cross-site activation object",
160+
body: function () {
161+
var tests = [0, 0];
162+
tests.forEach(function() {
163+
var eval = WScript.LoadScript(0, "samethread").eval;
164+
eval(0);
165+
});
166+
}
167+
},
158168
{
159169
name: "Destructuring declaration should return undefined",
160170
body: function () {

0 commit comments

Comments
 (0)