description( | |
"Tests what happens when you do a out-of-bounds access on a string and use that to install a getter that clobbers a structure." | |
); | |
function foo(s, o) { | |
var x = o.f; | |
s[42]; | |
var y = o.g; | |
return x + y; | |
} | |
noInline(foo); | |
silentTestPass = true; | |
var theObject = {}; | |
var didGetCalled = false; | |
String.prototype.__defineGetter__("42", function() { didGetCalled = true; delete theObject.g; theObject.h = 42 }); | |
while (testRunner.numberOfDFGCompiles(foo) < 1) { | |
didGetCalled = false; | |
shouldBe("foo(\"hello\", {f:1, g:2})", "3"); | |
shouldBe("didGetCalled", "true"); | |
} | |
theObject = {f:1, g:2}; | |
didGetCalled = false; | |
shouldBe("foo(\"hello\", theObject)", "0/0"); | |
shouldBe("didGetCalled", "true"); |