This is more of an fyi since I have no suggested fix.
applyEvalVillain("eval") turns direct eval into indirect eval
Since eval !== %eval%, all eval becomes direct eval.
You can see the difference in
const x = 'indirect';
(() => {
const x = 'direct';
console.log(`eval(x) => ${ eval('x') }`); // -> indirect
console.log(`(0, eval)(x) => ${ (0, eval)('x') }`); // -> direct
})();
This happens because of step 6.a in 12.3.4.1
- If Type(ref) is Reference and IsPropertyReference(ref) is false and GetReferencedName(ref) is "eval", then
a. If SameValue(func, %eval%) is true, then
when evaluating function calls where the function is the identifier eval.
This is more of an fyi since I have no suggested fix.
applyEvalVillain("eval")turns direct eval into indirect evaleval_villain/src/js/switcheroo.js
Line 385 in 8c49852
Since
eval!== %eval%, all eval becomes direct eval.You can see the difference in
This happens because of step 6.a in 12.3.4.1
when evaluating function calls where the function is the identifier eval.