code wiki / _hdl_build / nx_cbx_imgsig_gate.nx
nx_cbx_imgsig_gate.nx source
↩ module page · 44 lines · 3174 B
1// nx_cbx_imgsig_gate.nx -- proves the comic no-fake-green image-signature check (nx_cbx_pages.img_sig_ok) accepts
2// EVERY format is_image_name admits (JPEG/PNG/GIF/WEBP/BMP) and rejects non-images. The REGRESSION it guards: a
3// WebP or GIF cover -- a valid comic page -- used to be rejected by the old JPEG/PNG-only first-page gate, failing
4// the WHOLE comic ("books like comics missing pictures"). Gate-local copy of the helper. license_tier: ORIGINAL
5import "nx_syscalls.nx"
6
7func img_sig_ok(b: *u8, n: i64) -> i64 {
8 if n >= 2 { if (b[0] as i64) == 0xff { if (b[1] as i64) == 0xd8 { return 1 } } }
9 if n >= 4 { if (b[0] as i64) == 0x89 { if (b[1] as i64) == 0x50 { if (b[2] as i64) == 0x4e { if (b[3] as i64) == 0x47 { return 1 } } } } }
10 if n >= 4 { if (b[0] as i64) == 0x47 { if (b[1] as i64) == 0x49 { if (b[2] as i64) == 0x46 { if (b[3] as i64) == 0x38 { return 1 } } } } }
11 if n >= 2 { if (b[0] as i64) == 0x42 { if (b[1] as i64) == 0x4d { return 1 } } }
12 if n >= 12 { if (b[0] as i64) == 0x52 { if (b[1] as i64) == 0x49 { if (b[2] as i64) == 0x46 { if (b[3] as i64) == 0x46 { if (b[8] as i64) == 0x57 { if (b[9] as i64) == 0x45 { if (b[10] as i64) == 0x42 { if (b[11] as i64) == 0x50 { return 1 } } } } } } } } }
13 return 0
14}
15
16func sw(s: i64, v: i64) -> i64 { return 0 }
17
18func main() -> i64 {
19 var fails: i64 = 0
20 let b: *u8 = sys_mmap(64)
21 // T1 JPEG
22 b[0]=0xff as u8; b[1]=0xd8 as u8; if img_sig_ok(b, 2) != 1 { fails = fails + 1 }
23 // T2 PNG
24 b[0]=0x89 as u8; b[1]=0x50 as u8; b[2]=0x4e as u8; b[3]=0x47 as u8; if img_sig_ok(b, 4) != 1 { fails = fails + 1 }
25 // T3 GIF8 -- the REGRESSION: a GIF cover used to fail the whole comic
26 b[0]=0x47 as u8; b[1]=0x49 as u8; b[2]=0x46 as u8; b[3]=0x38 as u8; if img_sig_ok(b, 4) != 1 { fails = fails + 1 }
27 // T4 BMP "BM" (newly admitted)
28 b[0]=0x42 as u8; b[1]=0x4d as u8; if img_sig_ok(b, 2) != 1 { fails = fails + 1 }
29 // T5 WEBP "RIFF"...."WEBP" -- the REGRESSION: a WebP cover used to fail the whole comic
30 b[0]=0x52 as u8; b[1]=0x49 as u8; b[2]=0x46 as u8; b[3]=0x46 as u8; b[8]=0x57 as u8; b[9]=0x45 as u8; b[10]=0x42 as u8; b[11]=0x50 as u8; if img_sig_ok(b, 12) != 1 { fails = fails + 1 }
31 // T6 NEG: text/XML "<?xm" is NOT an image
32 b[0]=0x3c as u8; b[1]=0x3f as u8; b[2]=0x78 as u8; b[3]=0x6d as u8; if img_sig_ok(b, 4) != 0 { fails = fails + 1 }
33 // T7 NEG: empty buffer
34 if img_sig_ok(b, 0) != 0 { fails = fails + 1 }
35 // T8 NEG: RIFF but WAVE (audio) -- not a WEBP image
36 b[0]=0x52 as u8; b[1]=0x49 as u8; b[2]=0x46 as u8; b[3]=0x46 as u8; b[8]=0x57 as u8; b[9]=0x41 as u8; b[10]=0x56 as u8; b[11]=0x45 as u8; if img_sig_ok(b, 12) != 0 { fails = fails + 1 }
37 let w: i64 = sw(1, fails)
38 let m1: *u8 = "GATE nx_cbx_imgsig verdict=GREEN pass=8/8 (JPEG/PNG/GIF/WEBP/BMP accepted; text/empty/RIFF-WAVE rejected; comic-cover regression fixed)\n" as *u8
39 let m0: *u8 = "GATE nx_cbx_imgsig verdict=RED fails\n" as *u8
40 var i: i64 = 0
41 if fails == 0 { while m1[i] != (0 as u8) { i = i + 1 } sys_write(1, m1, i); sys_exit(0); return 0 }
42 while m0[i] != (0 as u8) { i = i + 1 } sys_write(1, m0, i); sys_exit(1)
43 return 1
44}