From d534e5785f38307b70d3aac1945260a261a94d50 Mon Sep 17 00:00:00 2001 From: XmiliaH Date: Thu, 6 Apr 2023 20:11:02 +0200 Subject: [PATCH] Wrap host objects passes through prepareStackTrace --- lib/setup-sandbox.js | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/lib/setup-sandbox.js b/lib/setup-sandbox.js index f6cbb8e..539ce04 100644 --- a/lib/setup-sandbox.js +++ b/lib/setup-sandbox.js @@ -276,13 +276,30 @@ if (typeof OriginalCallSite === 'function') { return; } const newWrapped = (error, sst) => { + const sandboxSst = ensureThis(sst); if (localArrayIsArray(sst)) { - for (let i=0; i < sst.length; i++) { - const cs = sst[i]; - if (typeof cs === 'object' && localReflectGetPrototypeOf(cs) === OriginalCallSite.prototype) { - sst[i] = new CallSite(cs); + if (sst === sandboxSst) { + for (let i=0; i < sst.length; i++) { + const cs = sst[i]; + if (typeof cs === 'object' && localReflectGetPrototypeOf(cs) === OriginalCallSite.prototype) { + sst[i] = new CallSite(cs); + } + } + } else { + sst = []; + for (let i=0; i < sandboxSst.length; i++) { + const cs = sandboxSst[i]; + localReflectDefineProperty(sst, i, { + __proto__: null, + value: new CallSite(cs), + enumerable: true, + configurable: true, + writable: true + }); } } + } else { + sst = sandboxSst; } return value(error, sst); };