code wiki / (root) / nx_wasm_memory_gate.nx

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}