fix(javascript): require complete receiver ownership proofs

This commit is contained in:
morluto committed 2026-10-24 08:22:14 +08:00
1 parent cc4f805541
commit 2496256cb7
5 files changed
+383 -311

No files matched your search

@@ -37,6 +37,8 @@ it.each([
'const box = {}; box.value = { name: "Alice" }; inspect(box); new Map().get("/accounts")',
'patch(() => ({ name: "Alice" })); new Map().get("/accounts")',
'const box = {}; box.prototype = Map.prototype; new Map().get("/accounts")',
'function expose() { const holder = { child: {} }; holder.child.prototype = Map.prototype; } new Map().get("/accounts")',
'const box = flag ? {} : {}; box.prototype = Map.prototype; new Map().get("/accounts")',
'const box = {}; const alias = box; alias.prototype = Map.prototype; inspect({}); new Map().get("/accounts")',
'const box = {}; box.make = () => Map.prototype; new Map().get("/accounts")',
'let box = {}; const first = box; box = {}; box.p = Map.prototype; patch(first); new Map().get("/accounts")',
@@ -84,6 +86,15 @@ it.each([
'const box = { set prototype(value) { patch(value); } }; box.prototype = Map.prototype; new Map().get("/accounts")',
'const box = new ExternalBox(); box.prototype = Map.prototype; new Map().get("/accounts")',
'function expose(box) { box.prototype = Map.prototype; } new Map().get("/accounts")',
'function expose(box = {}) { box.prototype = Map.prototype; } new Map().get("/accounts")',
'function expose(external, flag) { const box = flag ? {} : external; box.prototype = Map.prototype; } new Map().get("/accounts")',
'function expose(external) { const holder = { child: external }; holder.child.prototype = Map.prototype; } new Map().get("/accounts")',
'function expose(key) { const holder = { child: {} }; holder[key].prototype = Map.prototype; } new Map().get("/accounts")',
'function expose(key) { const holder = [{}]; holder[key].prototype = Map.prototype; } new Map().get("/accounts")',
'const box = flag ? {} : external(); box.prototype = Map.prototype; new Map().get("/accounts")',
'function expose(external, flag) { const make = flag ? () => ({}) : external; const box = make(); box.prototype = Map.prototype; } new Map().get("/accounts")',
'import external from "./external.mjs"; const box = flag ? {} : external; box.prototype = Map.prototype; new Map().get("/accounts")',
'let box; if (flag) box = {}; box.prototype = Map.prototype; new Map().get("/accounts")',
'const factory = { make() { return Map.prototype; } }; factory.make().get = fetch; new Map().get("/accounts")',
'new Map().__proto__.get = fetch; new Map().get("/accounts")',
'new Map().constructor.prototype.get = fetch; new Map().get("/accounts")',