Compare commits

...

1 Commits

Author SHA1 Message Date
Don Isaac
708702ac84 fix: test-shadow-realm-prepare-stack-trace 2025-03-18 22:56:52 -07:00
2 changed files with 54 additions and 0 deletions

View File

@@ -8,4 +8,5 @@ fixtures/repl*
.tmp.*
*shadow-realm*
!test-shadow-realm.js
!test-shadow-realm-prepare-stack-trace.js
**/fails.txt

View File

@@ -0,0 +1,53 @@
// Flags: --experimental-shadow-realm
'use strict';
require('../common');
const assert = require('assert');
let principalRealmPrepareStackTraceCalled = false;
Error.prepareStackTrace = (error, trace) => {
principalRealmPrepareStackTraceCalled = true;
return `${String(error)}\n at ${trace.join('\n at ')}`;
};
{
// Validates inner Error.prepareStackTrace can not leak into the outer realm.
const shadowRealm = new ShadowRealm();
const stack = shadowRealm.evaluate(`
Error.prepareStackTrace = (error, trace) => {
globalThis.leaked = 'inner';
return 'from shadow realm';
};
try {
throw new Error('boom');
} catch (e) {
e.stack;
}
`);
assert.ok(!principalRealmPrepareStackTraceCalled);
assert.strictEqual(stack, 'from shadow realm');
assert.strictEqual('leaked' in globalThis, false);
}
{
// Validates stacks can be generated in the ShadowRealm.
const shadowRealm = new ShadowRealm();
const stack = shadowRealm.evaluate(`
function myFunc() {
throw new Error('boom');
}
try {
myFunc();
} catch (e) {
e.stack;
}
`);
assert.ok(!principalRealmPrepareStackTraceCalled);
const lines = stack.split('\n');
assert.strictEqual(lines[0], 'Error: boom');
assert.match(lines[1], /^ {4}at myFunc \(.*\)/);
}