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}