nx_magnet_owned_gate_t271.nx source
↩ module page · 42 lines · 2697 B
1import "nx_magnet.nx"
2import "nx_gate_verdict.nx"
3func mt_add(p:*u8,at:i64,s:*u8)->i64{var i:i64=0;while s[i]!=0 as u8{p[at+i]=s[i];i=i+1};return at+i}
4func main()->i64{
5 let c:*i64=gv_ctr();let o:*MgOwned=sys_mmap_try(__size_of(MgOwned)) as *MgOwned
6 if (o as i64)<=0{return 3};mg_owned_clear(o)
7 let basic:*u8="magnet:?xt=urn:btih:bc83ee370076e0d0e7384bf3ea5a8451ee643a8b"
8 gv_check("basic hash",mg_parse_owned(basic,mg_len(basic),o)==1,c)
9 gv_check("no trackers retained as empty",o.tracker_count==0,c)
10 gv_check("release",mg_owned_release(o)==0,c)
11 gv_check("idempotent release",mg_owned_release(o)==0,c)
12 let bad:*u8="magnet:?xt=urn:btih:0123"
13 gv_check("malformed identity",mg_parse_owned(bad,mg_len(bad),o)==0,c)
14 gv_check("failed parse owns no mapping",(o.storage as i64)==0,c)
15 gv_check("zero extent",mg_parse_owned(0 as *u8,0,o)==0,c)
16 let small:*u8="magnet:?xt=urn:btih:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA&dn=Name+One&tr=https%3A%2F%2Fexample.test"
17 gv_check("base32 and encoded values",mg_parse_owned(small,mg_len(small),o)==1,c)
18 gv_check("decoded name",mg_len(o.name)==8&&o.name[4]==32 as u8,c)
19 gv_check("decoded tracker count",o.tracker_count==1,c);mg_owned_release(o)
20 let nul:*u8="magnet:?xt=urn:btih:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA&dn=a%00b"
21 gv_check("decoded NUL refused",mg_parse_owned(nul,mg_len(nul),o)==0,c)
22 let esc:*u8="magnet:?xt=urn:btih:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA&tr=%zz"
23 gv_check("invalid percent refused",mg_parse_owned(esc,mg_len(esc),o)==0,c)
24 let dupe:*u8="magnet:?xt=urn:btih:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA&xt=urn:btih:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
25 gv_check("duplicate identity explicitly refused",mg_parse_owned(dupe,mg_len(dupe),o)==0,c)
26 let trackers:i64=35;let textlen:i64=2001
27 let bytes:i64=mg_len(basic)+4+textlen+trackers*(4+textlen)+1
28 let u:*u8=sys_mmap_try(bytes);if (u as i64)<=0{return 3}
29 var n:i64=mt_add(u,0,basic);n=mt_add(u,n,"&dn=")
30 var i:i64=0;while i<textlen{u[n]=65 as u8;n=n+1;i=i+1}
31 var t:i64=0;while t<trackers{
32 n=mt_add(u,n,"&tr=");i=0;while i<textlen{u[n]=66 as u8;n=n+1;i=i+1};t=t+1
33 };u[n]=0 as u8
34 gv_check("input-derived long name and trackers",mg_parse_owned(u,n,o)==1,c)
35 gv_check("all trackers retained beyond old ceiling",o.tracker_count==trackers,c)
36 gv_check("long display name retained",mg_len(o.name)==textlen,c)
37 var exact:i64=1;t=0;while t<trackers{if mg_len(o.trackers[t] as *u8)!=textlen{exact=0};t=t+1}
38 gv_check("each long tracker retained",exact==1,c)
39 gv_check("long mapping release",mg_owned_release(o)==0,c)
40 sys_munmap(u,bytes);sys_munmap(o as *u8,__size_of(MgOwned))
41 return gv_verdict("MAGNET-OWNED",c,"owned parser only; legacy pointer API and end-to-end torrent resume remain unqualified")
42}