code wiki / _hdl_build / nx_stage_emitter_canonical_gate_t188.nx
nx_stage_emitter_canonical_gate_t188.nx source
↩ module page · 45 lines · 2603 B
1import "nx_deploy_stage_lib.nx"
2import "nx_json.nx"
3import "nx_signal.nx"
4import "nx_gate_verdict.nx"
5func main()->i64{
6 let c:*i64=gv_ctr();let r:*NxDeployStageResult=sys_mmap(__size_of(NxDeployStageResult)) as *NxDeployStageResult
7 ds_stage_result_init(r);r.code=0-9223372036854775807-1;r.visible=1;r.stage="test\nquote\"slash\\"
8 let length:i64=131073
9 let src:*u8=sys_mmap(length+1);var i:i64=0;while i<length{src[i]=97 as u8;i=i+1};src[length]=0 as u8
10 src[0]=10 as u8;src[1]=34 as u8;src[2]=92 as u8
11 let path:*u8="knowledge/gates/stage-large-receipt-t188.json"
12 let fd:i64=sys_openat_wr(path,MODE_0644)
13 gv_check("large escaped receipt emitted",ds_emit_result(fd,src,"example.new",r)==0,c)
14 gv_check("receipt fd closed",sys_close(fd)==0,c)
15 let n:*i64=sys_mmap(8) as *i64
16 let bytes:*u8=sys_read_file(path,n)
17 gv_check("receipt not limited to1024 or65536 bytes",*n>length,c)
18 let t:*NxJsonTok=sys_mmap(__size_of(NxJsonTok)) as *NxJsonTok
19 t.src=bytes;t.len=*n;t.pos=0;t.kind=0;t.tok_off=0;t.tok_len=0
20 var ok:i64=1;var tokens:i64=0;var done:i64=0
21 while done==0{
22 let kind:i64=nx_json_next(t)
23 if kind==NX_JSON_ERROR{ok=0;break}
24 if kind==NX_JSON_EOF{done=1}else{tokens=tokens+1}
25 }
26 gv_check("complete receipt tokenizes without invalid string escapes",ok==1&&done==1&&tokens==53,c)
27 gv_check("failed receipt fd reports failure",ds_emit_result(0-1,src,"example.new",r)!=0,c)
28 let old:*i64=sys_mmap(16) as *i64;let lim:*i64=sys_mmap(16) as *i64;let status:*i64=sys_mmap(8) as *i64
29 let childfd:i64=sys_openat_wr("knowledge/gates/stage-noalloc-receipt-t188.json",MODE_0644)
30 let pid:i64=sys_fork()
31 if pid==0{
32 if nx_prlimit(0,RLIMIT_AS,0 as *u8,old as *u8)!=0{sys_exit(2)}
33 lim[0]=0;lim[1]=old[1]
34 if nx_prlimit(0,RLIMIT_AS,lim as *u8,0 as *u8)!=0{sys_exit(3)}
35 if ds_emit_result(childfd,"source","target.new",r)!=0{sys_exit(4)};sys_exit(0)
36 }
37 var waited:i64=0-1;if pid>0{waited=sys_wait4(pid,status,0)};sys_close(childfd)
38 gv_check("receipt emission works under actual zero address-space limit",pid>0&&waited==pid&&wait_status_rc(status[0])==0,c)
39 let killed:i64=sys_fork()
40 if killed==0{if nx_signal_default(15)!=0{sys_exit(77)};nx_signal_raise(15);sys_exit(78)}
41 var killedwait:i64=0-1;if killed>0{killedwait=sys_wait4(killed,status,0)}
42 gv_check("signal-killed owned child cannot pass exit0",killed>0&&killedwait==killed&&wait_term_signal(status[0])==15&&wait_status_rc(status[0])!=0,c)
43 gv_puts("receipt_bytes=");gv_num(*n);gv_puts("\n")
44 return gv_verdict("stage-receipt",c,"Native JSON tokenization and real resource denial; synthetic long string is not a filesystem-path claim")
45}