//------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- // Try variants of a pattern known to cause exploitable trashing of the Null // object's vtable: access a local var/function only within the non-evaluated // branch of a ?: operator, then do instanceof null to force virtual call using // the Null object's vtable. function write(x) { WScript.Echo(x + ''); } (function () { (function () { return true ? true : x; })(); function x() { }; })(); try { var z = Object instanceof null; } catch (e) { write(e.message); } (function () { (function () { return true ? true : x; })(); var x; })(); try { var z = Object instanceof null; } catch (e) { write(e.message); } (function () { (function () { return false ? x : false; })(); function x() { }; })(); try { var z = Object instanceof null; } catch (e) { write(e.message); } (function () { (function () { return false ? x : false; })(); var x; })(); try { var z = Object instanceof null; } catch (e) { write(e.message); }