diff options
Diffstat (limited to 'deps/v8/test/mjsunit/error-constructors.js')
-rw-r--r-- | deps/v8/test/mjsunit/error-constructors.js | 43 |
1 files changed, 9 insertions, 34 deletions
diff --git a/deps/v8/test/mjsunit/error-constructors.js b/deps/v8/test/mjsunit/error-constructors.js index 1ada39de55..5c2aac5b87 100644 --- a/deps/v8/test/mjsunit/error-constructors.js +++ b/deps/v8/test/mjsunit/error-constructors.js @@ -69,9 +69,11 @@ try { assertTrue(e.hasOwnProperty('stack')); // Check that intercepting property access from toString is prevented for -// compiler errors. This is not specified, but allowing interception -// through a getter can leak error objects from different -// script tags in the same context in a browser setting. +// compiler errors. This is not specified, but allowing interception through a +// getter can leak error objects from different script tags in the same context +// in a browser setting. Use Realm.eval as a proxy for loading scripts. We +// ignore the exception thrown from it since that would not be catchable from +// user-land code. var errors = [SyntaxError, ReferenceError, TypeError, RangeError, URIError]; var error_triggers = ["syntax error", "var error = reference", @@ -79,39 +81,12 @@ var error_triggers = ["syntax error", "String.fromCodePoint(0xFFFFFF)", "decodeURI('%F')"]; for (var i in errors) { - var name = errors[i].name; - // Monkey-patch prototype. - var props = ["name", "message", "stack"]; - for (var j in props) { - errors[i].prototype.__defineGetter__(props[j], fail); + for (var prop of ["name", "message", "stack"]) { + errors[i].prototype.__defineGetter__(prop, fail); } // String conversion should not invoke monkey-patched getters on prototype. - var error; - try { - eval(error_triggers[i]); - } catch (e) { - error = e; - } - assertTrue(error.toString().startsWith(name)); - - // Deleting message on the error (exposing the getter) is fine. - delete error.message; - assertEquals(name, error.toString()); - - // Custom properties shadowing the name are fine. - var myerror = { name: "myerror", message: "mymessage"}; - myerror.__proto__ = error; - assertEquals("myerror: mymessage", myerror.toString()); - - // Custom getters in actual objects are welcome. - error.__defineGetter__("name", function() { return "mine"; }); - assertEquals("mine", error.toString()); - - // Custom properties shadowing the name are fine. - var myerror2 = { message: "mymessage"}; - myerror2.__proto__ = error; - assertEquals("mine: mymessage", myerror2.toString()); + assertThrows(()=>Realm.eval(0, error_triggers[i])); } // Monkey-patching non-internal errors should still be observable. @@ -128,7 +103,7 @@ for (var i in errors) { Error.prototype.toString = Object.prototype.toString; -assertEquals("[object Error]", Error.prototype.toString()); +assertEquals("[object Object]", Error.prototype.toString()); assertEquals(Object.prototype, Error.prototype.__proto__); var e = new Error("foo"); assertEquals("[object Error]", e.toString()); |