nx_wasm_memory_gate.nx source
↩ module page · 31 lines · 1498 B
1import "nx_syscalls.nx"
2import "nx_gate_verdict.nx"
3import "nx_wasm_memory_lib.nx"
4const WMG_CELL: i64=8
5// Witness compiled with --shared 365 730; static-data reservation adds one page.
6const WMG_REQUEST_PAGES: i64=365
7const WMG_EXPECT_MAX: i64=730
8func main(argc: i64,argv: *i64) -> i64 {
9 let c: *i64=gv_ctr()
10 let out: *i64=sys_mmap(WM_FIELDS*WMG_CELL) as *i64
11 gv_check_eq("truncated header",wmem_read(0 as *u8,0,out),0-1,c)
12 if argc<2 { gv_check("real shared module required",0,c) } else {
13 let sizes: *i64=sys_mmap(2*WMG_CELL) as *i64
14 let b: *u8=sys_map_file(argv[1] as *u8,sizes)
15 let rc: i64=wmem_read(b,sizes[0],out)
16 gv_check_eq("actual module descriptor",rc,0,c)
17 if rc==0 {
18 gv_check_eq("actual minimum includes compiler data",out[0],WMG_REQUEST_PAGES+1,c)
19 gv_check_eq("maximum preserved",out[1],WMG_EXPECT_MAX,c)
20 gv_check_eq("shared flag",out[2],1,c)
21 gv_check_eq("imported flag",out[3],1,c)
22 var n: i64=0
23 while n<WM_HEADER { gv_check_eq("each short header refused",wmem_read(b,n,out),0-1,c);n=n+1 }
24 gv_check("truncated final section refused",(wmem_read(b,sizes[0]-1,out)<0) as i64,c)
25 }
26 if sizes[0]>0 { sys_munmap(b,sizes[0]) }
27 sys_munmap(sizes as *u8,2*WMG_CELL)
28 }
29 sys_munmap(out as *u8,WM_FIELDS*WMG_CELL)
30 return gv_verdict("WASM-MEMORY",c,"compiled shared artifact memory contract and truncated input boundaries")
31}