Files
scriptc/tests/corpus/code-generation-disallowed.cjs
T
2026-10-20 17:56:44 -05:00

37 lines
963 B
JavaScript

// @disallow-code-generation
// The probe packages ship (zod 4's allowsEval): an aliased Function
// constructor inside try/catch decides between a generated fast path and
// an interpreted fallback. Arguments convert to strings before the
// refusal, calling an object's toString.
const F = Function;
function allowsEval() {
try {
new F("");
return true;
} catch (e) {
console.log("probe:", e.constructor === EvalError, e.message);
return false;
}
}
const parse = allowsEval()
? new F("input", "return input.trim()")
: (input) => input.trim();
console.log(JSON.stringify(parse(" value ")));
try {
new Function({ toString() { console.log("toString called"); return "x"; } }, "return x");
} catch (e) {
console.log(String(e));
}
try {
eval({ toString() { console.log("never called"); return "1"; } });
} catch (e) {
console.log(String(e));
}
const indirect = eval;
try {
indirect("1");
} catch (e) {
console.log(e.name);
}