code wiki / (root) / nx_texr_validate_candidate_t285.nx

nx_texr_validate_candidate_t285.nx source

↩ module page · 52 lines · 1822 B

1// TEXR structural boundary: reuse validated NXA section extent before reading records. 2// Payload integrity is not a claim about decoded image quality or anatomical adequacy. 3func ntr_texr_validate(b:*u8,flen:i64)->i64{ 4 let entry:i64=nxa_section_entry(b,flen,nxa_tag4("TEXR")) 5 if entry<0{return entry} 6 let w:*i64=b as *i64 7 let words:i64=w[entry+2] 8 if words<NTR_HDR_WORDS{return 0-3} 9 let o:i64=w[entry+1]/NTR_WORD 10 if w[o+NTR_W_VER]>NTR_VERSION{return 0-2} 11 if w[o+NTR_W_VER]!=NTR_VERSION{return 0-3} 12 if w[o+NTR_W_MODEL]!=NTR_MODEL_SPECGLOSS{return 0-3} 13 if w[o+NTR_W_NMAPS]!=NTR_NMAPS{return 0-3} 14 if w[o+NTR_W_JW]!=NTR_JOINT_WORDS{return 0-3} 15 let stride:i64=NTR_SET_META+NTR_NMAPS*NTR_MAPREC 16 if w[o+NTR_W_SETW]!=stride{return 0-3} 17 if w[o+NTR_W_RES]<=0{return 0-3} 18 if w[o+NTR_W_MPX]<=0{return 0-3} 19 if w[o+NTR_W_MREP]<=0{return 0-3} 20 if w[o+NTR_W_RANGE]<=0{return 0-3} 21 let nj:i64=w[o+NTR_W_NJ] 22 let ns:i64=w[o+NTR_W_NSETS] 23 if nj<0{return 0-3} 24 if ns<0{return 0-3};if ns>NTR_REGIONS{return 0-3} 25 var remain:i64=words-NTR_HDR_WORDS 26 if nj>remain/NTR_JOINT_WORDS{return 0-3} 27 let jw:i64=nj*NTR_JOINT_WORDS 28 remain=remain-jw 29 if ns>remain/stride{return 0-3} 30 remain=remain-ns*stride 31 if w[o+NTR_W_BLOBW]!=remain{return 0-3} 32 let blobBytes:i64=remain*NTR_WORD 33 var seen:i64=0;var s:i64=0 34 while s<ns{ 35 let at:i64=o+NTR_HDR_WORDS+jw+s*stride 36 let region:i64=w[at+NTR_S_REGION] 37 if region<0{return 0-3};if region>=NTR_REGIONS{return 0-3} 38 let bit:i64=1<<region 39 if (seen&bit)!=0{return 0-3};seen=seen|bit 40 var m:i64=0 41 while m<NTR_NMAPS{ 42 let rec:i64=at+NTR_SET_META+m*NTR_MAPREC 43 if w[rec]!=m{return 0-3} 44 let off:i64=w[rec+1];let bytes:i64=w[rec+2] 45 if off<0{return 0-3};if off>blobBytes{return 0-3} 46 if bytes<=0{return 0-3};if bytes>blobBytes-off{return 0-3} 47 m=m+1 48 } 49 s=s+1 50 } 51 return o 52}