summaryrefslogtreecommitdiff
path: root/deps/v8/test/mjsunit/error-constructors.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/test/mjsunit/error-constructors.js')
-rw-r--r--deps/v8/test/mjsunit/error-constructors.js43
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());