code wiki / (root) / nx_gltf_inverse_contract_t374.nx

nx_gltf_inverse_contract_t374.nx source

↩ module page · 50 lines · 1706 B

1// nx_gltf_inverse_contract_t374.nx 2// First native contract fixture for the reusable GLB inverse path. 3// It proves bounded GLB container admission and structured refusal codes. 4// Geometry conversion remains deliberately unimplemented until the NXMSH2 writer owner is adopted. 5import "nx_syscalls.nx" 6 7const GLB_OK:i64=0 8const GLB_E_OPEN:i64=-1001 9const GLB_E_EMPTY:i64=-1002 10const GLB_E_MAGIC:i64=-1003 11const GLB_E_VERSION:i64=-1004 12const GLB_E_HEADER:i64=-1005 13const GLB_E_JSON:i64=-1006 14const GLB_E_BIN:i64=-1007 15const GLB_E_LIMIT:i64=-1008 16const GLB_CONFIG_MAX_BYTES:i64=67108864 17 18func rd32(p:*u8,o:i64)->i64{ 19 return (p[o] as i64)|((p[o+1] as i64)<<8)|((p[o+2] as i64)<<16)|((p[o+3] as i64)<<24) 20} 21func glb_admit(p:*u8,n:i64)->i64{ 22 if (p as i64)<=0{return GLB_E_OPEN} 23 if n<20{return GLB_E_EMPTY} 24 if n>GLB_CONFIG_MAX_BYTES{return GLB_E_LIMIT} 25 if rd32(p,0)!=0x46546c67{return GLB_E_MAGIC} 26 if rd32(p,4)!=2{return GLB_E_VERSION} 27 let declared:i64=rd32(p,8) 28 if declared<28||declared>n{return GLB_E_HEADER} 29 let jsonLen:i64=rd32(p,12) 30 if rd32(p,16)!=0x4e4f534a{return GLB_E_JSON} 31 if jsonLen<2||jsonLen>declared-20{return GLB_E_JSON} 32 let binHead:i64=20+jsonLen 33 if binHead+8>declared{return GLB_E_BIN} 34 let binLen:i64=rd32(p,binHead) 35 if rd32(p,binHead+4)!=0x004e4942{return GLB_E_BIN} 36 if binLen<1||binLen>declared-(binHead+8){return GLB_E_BIN} 37 if binHead+8+binLen>n{return GLB_E_BIN} 38 return GLB_OK 39} 40func main()->i64{ 41 let path:*u8="buildroot/knowledge/gates/faceanat-alpha-t374.glb" as *u8 42 let nbox:*i64=sys_mmap(8) as *i64 43 nbox[0]=0 44 let p:*u8=sys_read_file(path,nbox) 45 let n:i64=nbox[0] 46 let rc:i64=glb_admit(p,n) 47 if (p as i64)>0{sys_munmap(p,n)} 48 sys_munmap(nbox as *u8,8) 49 return rc 50}