nx_gzip_inflate_kat_test.nx source
↩ module page · 887 lines · 22666 B
1// nx_gzip_inflate_kat_test.nx -- gzip READ path KAT (Content-Encoding: gzip).
2// Proves nx_gzip_inflate decodes REAL python-`gzip` streams (what servers
3// actually send) end-to-end: RFC1952 header + DEFLATE payload + CRC32 + ISIZE.
4// Composes the proven gunzip (nx_gzip_wrap -> nx_deflate_inflate + nx_crc32),
5// not reinvented. This is the browser's gzip-page READ keystone.
6// G1 plain stream (FLG=0) -> OK, bytes exact, crc & isize verify
7// G2 stream WITH FNAME header field -> OK (optional-field walk exercised)
8// G3 corrupted CRC32 trailer -> NX_GZ_ERR_CRC_MISMATCH (neg-control)
9// G4 corrupted magic ID1 -> NX_GZ_ERR_BAD_MAGIC (neg-control)
10// G3/G4 make the gate DISCRIMINATE (it rejects corruption, not just passes).
11// expect_exit: 0
12// license_tier: ORIGINAL
13
14import "nx_syscalls.nx"
15import "nx_runtime.nx"
16import "nx_gzip_wrap.nx"
17
18func main() -> nx_int {
19 // ---- G1: plain real gzip stream ----
20 let g1: *u8 = (sys_mmap(168)) as *u8
21 g1[0] = 0x1f as u8
22 g1[1] = 0x8b as u8
23 g1[2] = 0x08 as u8
24 g1[3] = 0x00 as u8
25 g1[4] = 0x00 as u8
26 g1[5] = 0x00 as u8
27 g1[6] = 0x00 as u8
28 g1[7] = 0x00 as u8
29 g1[8] = 0x02 as u8
30 g1[9] = 0xff as u8
31 g1[10] = 0x35 as u8
32 g1[11] = 0x8e as u8
33 g1[12] = 0xb1 as u8
34 g1[13] = 0x0e as u8
35 g1[14] = 0xc2 as u8
36 g1[15] = 0x30 as u8
37 g1[16] = 0x10 as u8
38 g1[17] = 0x43 as u8
39 g1[18] = 0x7f as u8
40 g1[19] = 0xe5 as u8
41 g1[20] = 0x3e as u8
42 g1[21] = 0xa0 as u8
43 g1[22] = 0x34 as u8
44 g1[23] = 0x02 as u8
45 g1[24] = 0x36 as u8
46 g1[25] = 0x74 as u8
47 g1[26] = 0xca as u8
48 g1[27] = 0x52 as u8
49 g1[28] = 0x75 as u8
50 g1[29] = 0xe8 as u8
51 g1[30] = 0x4a as u8
52 g1[31] = 0x3b as u8
53 g1[32] = 0xb1 as u8
54 g1[33] = 0x25 as u8
55 g1[34] = 0xcd as u8
56 g1[35] = 0x91 as u8
57 g1[36] = 0x44 as u8
58 g1[37] = 0x82 as u8
59 g1[38] = 0x4b as u8
60 g1[39] = 0x94 as u8
61 g1[40] = 0x0b as u8
62 g1[41] = 0x20 as u8
63 g1[42] = 0xf8 as u8
64 g1[43] = 0x7a as u8
65 g1[44] = 0x22 as u8
66 g1[45] = 0x2a as u8
67 g1[46] = 0x24 as u8
68 g1[47] = 0x4f as u8
69 g1[48] = 0xf6 as u8
70 g1[49] = 0xb3 as u8
71 g1[50] = 0x65 as u8
72 g1[51] = 0x0c as u8
73 g1[52] = 0xf5 as u8
74 g1[53] = 0x7e as u8
75 g1[54] = 0xd3 as u8
76 g1[55] = 0x68 as u8
77 g1[56] = 0x93 as u8
78 g1[57] = 0x7b as u8
79 g1[58] = 0x6b as u8
80 g1[59] = 0x0c as u8
81 g1[60] = 0x7b as u8
82 g1[61] = 0x3d as u8
83 g1[62] = 0xa7 as u8
84 g1[63] = 0x27 as u8
85 g1[64] = 0x15 as u8
86 g1[65] = 0x8a as u8
87 g1[66] = 0x9e as u8
88 g1[67] = 0xc1 as u8
89 g1[68] = 0x7f as u8
90 g1[69] = 0x62 as u8
91 g1[70] = 0x86 as u8
92 g1[71] = 0x42 as u8
93 g1[72] = 0xc6 as u8
94 g1[73] = 0x41 as u8
95 g1[74] = 0x36 as u8
96 g1[75] = 0x35 as u8
97 g1[76] = 0xa0 as u8
98 g1[77] = 0x6a as u8
99 g1[78] = 0x21 as u8
100 g1[79] = 0x66 as u8
101 g1[80] = 0xbd as u8
102 g1[81] = 0x04 as u8
103 g1[82] = 0x02 as u8
104 g1[83] = 0x5b as u8
105 g1[84] = 0xd2 as u8
106 g1[85] = 0x4b as u8
107 g1[86] = 0xa8 as u8
108 g1[87] = 0x80 as u8
109 g1[88] = 0x7f as u8
110 g1[89] = 0x70 as u8
111 g1[90] = 0x63 as u8
112 g1[91] = 0x04 as u8
113 g1[92] = 0x86 as u8
114 g1[93] = 0xc4 as u8
115 g1[94] = 0x95 as u8
116 g1[95] = 0xb8 as u8
117 g1[96] = 0xee as u8
118 g1[97] = 0x46 as u8
119 g1[98] = 0x5e as u8
120 g1[99] = 0x93 as u8
121 g1[100] = 0x8b as u8
122 g1[101] = 0xec as u8
123 g1[102] = 0x4f as u8
124 g1[103] = 0xff as u8
125 g1[104] = 0xae as u8
126 g1[105] = 0xe4 as u8
127 g1[106] = 0xc4 as u8
128 g1[107] = 0x42 as u8
129 g1[108] = 0xd2 as u8
130 g1[109] = 0x41 as u8
131 g1[110] = 0xdb as u8
132 g1[111] = 0x8c as u8
133 g1[112] = 0xd7 as u8
134 g1[113] = 0x48 as u8
135 g1[114] = 0x0d as u8
136 g1[115] = 0x3d as u8
137 g1[116] = 0x0f as u8
138 g1[117] = 0xc7 as u8
139 g1[118] = 0x03 as u8
140 g1[119] = 0x18 as u8
141 g1[120] = 0x76 as u8
142 g1[121] = 0x30 as u8
143 g1[122] = 0xcd as u8
144 g1[123] = 0xd3 as u8
145 g1[124] = 0x65 as u8
146 g1[125] = 0xec as u8
147 g1[126] = 0xa0 as u8
148 g1[127] = 0x06 as u8
149 g1[128] = 0xe2 as u8
150 g1[129] = 0x46 as u8
151 g1[130] = 0xb2 as u8
152 g1[131] = 0xa3 as u8
153 g1[132] = 0x22 as u8
154 g1[133] = 0x3d as u8
155 g1[134] = 0x18 as u8
156 g1[135] = 0xbb as u8
157 g1[136] = 0x6e as u8
158 g1[137] = 0x6a as u8
159 g1[138] = 0x56 as u8
160 g1[139] = 0x26 as u8
161 g1[140] = 0x53 as u8
162 g1[141] = 0xa5 as u8
163 g1[142] = 0x47 as u8
164 g1[143] = 0x95 as u8
165 g1[144] = 0x35 as u8
166 g1[145] = 0xaa as u8
167 g1[146] = 0xed as u8
168 g1[147] = 0x9e as u8
169 g1[148] = 0xfa as u8
170 g1[149] = 0x7d as u8
171 g1[150] = 0xfd as u8
172 g1[151] = 0x02 as u8
173 g1[152] = 0x26 as u8
174 g1[153] = 0x4e as u8
175 g1[154] = 0x4c as u8
176 g1[155] = 0xc8 as u8
177 g1[156] = 0xb2 as u8
178 g1[157] = 0x00 as u8
179 g1[158] = 0x00 as u8
180 g1[159] = 0x00 as u8
181 let e1: *u8 = (sys_mmap(186)) as *u8
182 e1[0] = 0x3c as u8
183 e1[1] = 0x68 as u8
184 e1[2] = 0x74 as u8
185 e1[3] = 0x6d as u8
186 e1[4] = 0x6c as u8
187 e1[5] = 0x3e as u8
188 e1[6] = 0x3c as u8
189 e1[7] = 0x62 as u8
190 e1[8] = 0x6f as u8
191 e1[9] = 0x64 as u8
192 e1[10] = 0x79 as u8
193 e1[11] = 0x3e as u8
194 e1[12] = 0x3c as u8
195 e1[13] = 0x68 as u8
196 e1[14] = 0x31 as u8
197 e1[15] = 0x3e as u8
198 e1[16] = 0x53 as u8
199 e1[17] = 0x6f as u8
200 e1[18] = 0x76 as u8
201 e1[19] = 0x65 as u8
202 e1[20] = 0x72 as u8
203 e1[21] = 0x65 as u8
204 e1[22] = 0x69 as u8
205 e1[23] = 0x67 as u8
206 e1[24] = 0x6e as u8
207 e1[25] = 0x20 as u8
208 e1[26] = 0x67 as u8
209 e1[27] = 0x7a as u8
210 e1[28] = 0x69 as u8
211 e1[29] = 0x70 as u8
212 e1[30] = 0x20 as u8
213 e1[31] = 0x72 as u8
214 e1[32] = 0x65 as u8
215 e1[33] = 0x61 as u8
216 e1[34] = 0x64 as u8
217 e1[35] = 0x20 as u8
218 e1[36] = 0x70 as u8
219 e1[37] = 0x61 as u8
220 e1[38] = 0x74 as u8
221 e1[39] = 0x68 as u8
222 e1[40] = 0x3c as u8
223 e1[41] = 0x2f as u8
224 e1[42] = 0x68 as u8
225 e1[43] = 0x31 as u8
226 e1[44] = 0x3e as u8
227 e1[45] = 0x3c as u8
228 e1[46] = 0x70 as u8
229 e1[47] = 0x3e as u8
230 e1[48] = 0x54 as u8
231 e1[49] = 0x68 as u8
232 e1[50] = 0x65 as u8
233 e1[51] = 0x20 as u8
234 e1[52] = 0x62 as u8
235 e1[53] = 0x72 as u8
236 e1[54] = 0x6f as u8
237 e1[55] = 0x77 as u8
238 e1[56] = 0x73 as u8
239 e1[57] = 0x65 as u8
240 e1[58] = 0x72 as u8
241 e1[59] = 0x20 as u8
242 e1[60] = 0x67 as u8
243 e1[61] = 0x75 as u8
244 e1[62] = 0x6e as u8
245 e1[63] = 0x7a as u8
246 e1[64] = 0x69 as u8
247 e1[65] = 0x70 as u8
248 e1[66] = 0x73 as u8
249 e1[67] = 0x20 as u8
250 e1[68] = 0x43 as u8
251 e1[69] = 0x6f as u8
252 e1[70] = 0x6e as u8
253 e1[71] = 0x74 as u8
254 e1[72] = 0x65 as u8
255 e1[73] = 0x6e as u8
256 e1[74] = 0x74 as u8
257 e1[75] = 0x2d as u8
258 e1[76] = 0x45 as u8
259 e1[77] = 0x6e as u8
260 e1[78] = 0x63 as u8
261 e1[79] = 0x6f as u8
262 e1[80] = 0x64 as u8
263 e1[81] = 0x69 as u8
264 e1[82] = 0x6e as u8
265 e1[83] = 0x67 as u8
266 e1[84] = 0x3a as u8
267 e1[85] = 0x20 as u8
268 e1[86] = 0x67 as u8
269 e1[87] = 0x7a as u8
270 e1[88] = 0x69 as u8
271 e1[89] = 0x70 as u8
272 e1[90] = 0x20 as u8
273 e1[91] = 0x72 as u8
274 e1[92] = 0x65 as u8
275 e1[93] = 0x73 as u8
276 e1[94] = 0x70 as u8
277 e1[95] = 0x6f as u8
278 e1[96] = 0x6e as u8
279 e1[97] = 0x73 as u8
280 e1[98] = 0x65 as u8
281 e1[99] = 0x73 as u8
282 e1[100] = 0x2c as u8
283 e1[101] = 0x20 as u8
284 e1[102] = 0x76 as u8
285 e1[103] = 0x65 as u8
286 e1[104] = 0x72 as u8
287 e1[105] = 0x69 as u8
288 e1[106] = 0x66 as u8
289 e1[107] = 0x69 as u8
290 e1[108] = 0x65 as u8
291 e1[109] = 0x73 as u8
292 e1[110] = 0x20 as u8
293 e1[111] = 0x43 as u8
294 e1[112] = 0x52 as u8
295 e1[113] = 0x43 as u8
296 e1[114] = 0x33 as u8
297 e1[115] = 0x32 as u8
298 e1[116] = 0x20 as u8
299 e1[117] = 0x61 as u8
300 e1[118] = 0x6e as u8
301 e1[119] = 0x64 as u8
302 e1[120] = 0x20 as u8
303 e1[121] = 0x49 as u8
304 e1[122] = 0x53 as u8
305 e1[123] = 0x49 as u8
306 e1[124] = 0x5a as u8
307 e1[125] = 0x45 as u8
308 e1[126] = 0x2c as u8
309 e1[127] = 0x20 as u8
310 e1[128] = 0x74 as u8
311 e1[129] = 0x68 as u8
312 e1[130] = 0x65 as u8
313 e1[131] = 0x6e as u8
314 e1[132] = 0x20 as u8
315 e1[133] = 0x72 as u8
316 e1[134] = 0x65 as u8
317 e1[135] = 0x6e as u8
318 e1[136] = 0x64 as u8
319 e1[137] = 0x65 as u8
320 e1[138] = 0x72 as u8
321 e1[139] = 0x73 as u8
322 e1[140] = 0x2e as u8
323 e1[141] = 0x20 as u8
324 e1[142] = 0x61 as u8
325 e1[143] = 0x62 as u8
326 e1[144] = 0x63 as u8
327 e1[145] = 0x61 as u8
328 e1[146] = 0x62 as u8
329 e1[147] = 0x63 as u8
330 e1[148] = 0x61 as u8
331 e1[149] = 0x62 as u8
332 e1[150] = 0x63 as u8
333 e1[151] = 0x20 as u8
334 e1[152] = 0x72 as u8
335 e1[153] = 0x65 as u8
336 e1[154] = 0x70 as u8
337 e1[155] = 0x65 as u8
338 e1[156] = 0x61 as u8
339 e1[157] = 0x74 as u8
340 e1[158] = 0x73 as u8
341 e1[159] = 0x2e as u8
342 e1[160] = 0x3c as u8
343 e1[161] = 0x2f as u8
344 e1[162] = 0x70 as u8
345 e1[163] = 0x3e as u8
346 e1[164] = 0x3c as u8
347 e1[165] = 0x2f as u8
348 e1[166] = 0x62 as u8
349 e1[167] = 0x6f as u8
350 e1[168] = 0x64 as u8
351 e1[169] = 0x79 as u8
352 e1[170] = 0x3e as u8
353 e1[171] = 0x3c as u8
354 e1[172] = 0x2f as u8
355 e1[173] = 0x68 as u8
356 e1[174] = 0x74 as u8
357 e1[175] = 0x6d as u8
358 e1[176] = 0x6c as u8
359 e1[177] = 0x3e as u8
360 let r1: *NxGzipResult = nx_gzip_inflate(g1, 160, 306)
361 if r1 == (0 as *NxGzipResult) { return 10 }
362 if r1.error_code != NX_GZ_OK { return 11 }
363 if r1.output_size != 178 { return 12 }
364 if r1.crc_expected != r1.crc_computed { return 13 }
365 if r1.size_expected != r1.size_actual { return 14 }
366 var i1: nx_int = 0
367 while i1 < 178 {
368 if ((r1.output_data[i1] as nx_int)&255) != ((e1[i1] as nx_int)&255) { return 15 }
369 i1 = i1 + 1
370 }
371
372 // ---- G2: gzip stream WITH FNAME header field ----
373 let g2: *u8 = (sys_mmap(178)) as *u8
374 g2[0] = 0x1f as u8
375 g2[1] = 0x8b as u8
376 g2[2] = 0x08 as u8
377 g2[3] = 0x08 as u8
378 g2[4] = 0x00 as u8
379 g2[5] = 0x00 as u8
380 g2[6] = 0x00 as u8
381 g2[7] = 0x00 as u8
382 g2[8] = 0x00 as u8
383 g2[9] = 0xff as u8
384 g2[10] = 0x70 as u8
385 g2[11] = 0x61 as u8
386 g2[12] = 0x67 as u8
387 g2[13] = 0x65 as u8
388 g2[14] = 0x2e as u8
389 g2[15] = 0x68 as u8
390 g2[16] = 0x74 as u8
391 g2[17] = 0x6d as u8
392 g2[18] = 0x6c as u8
393 g2[19] = 0x00 as u8
394 g2[20] = 0x35 as u8
395 g2[21] = 0x8e as u8
396 g2[22] = 0xb1 as u8
397 g2[23] = 0x0e as u8
398 g2[24] = 0xc2 as u8
399 g2[25] = 0x30 as u8
400 g2[26] = 0x10 as u8
401 g2[27] = 0x43 as u8
402 g2[28] = 0x7f as u8
403 g2[29] = 0xe5 as u8
404 g2[30] = 0x3e as u8
405 g2[31] = 0xa0 as u8
406 g2[32] = 0x34 as u8
407 g2[33] = 0x02 as u8
408 g2[34] = 0x36 as u8
409 g2[35] = 0x74 as u8
410 g2[36] = 0xca as u8
411 g2[37] = 0x52 as u8
412 g2[38] = 0x75 as u8
413 g2[39] = 0xe8 as u8
414 g2[40] = 0x4a as u8
415 g2[41] = 0x3b as u8
416 g2[42] = 0xb1 as u8
417 g2[43] = 0x25 as u8
418 g2[44] = 0xcd as u8
419 g2[45] = 0x91 as u8
420 g2[46] = 0x44 as u8
421 g2[47] = 0x82 as u8
422 g2[48] = 0x4b as u8
423 g2[49] = 0x94 as u8
424 g2[50] = 0x0b as u8
425 g2[51] = 0x20 as u8
426 g2[52] = 0xf8 as u8
427 g2[53] = 0x7a as u8
428 g2[54] = 0x22 as u8
429 g2[55] = 0x2a as u8
430 g2[56] = 0x24 as u8
431 g2[57] = 0x4f as u8
432 g2[58] = 0xf6 as u8
433 g2[59] = 0xb3 as u8
434 g2[60] = 0x65 as u8
435 g2[61] = 0x0c as u8
436 g2[62] = 0xf5 as u8
437 g2[63] = 0x7e as u8
438 g2[64] = 0xd3 as u8
439 g2[65] = 0x68 as u8
440 g2[66] = 0x93 as u8
441 g2[67] = 0x7b as u8
442 g2[68] = 0x6b as u8
443 g2[69] = 0x0c as u8
444 g2[70] = 0x7b as u8
445 g2[71] = 0x3d as u8
446 g2[72] = 0xa7 as u8
447 g2[73] = 0x27 as u8
448 g2[74] = 0x15 as u8
449 g2[75] = 0x8a as u8
450 g2[76] = 0x9e as u8
451 g2[77] = 0xc1 as u8
452 g2[78] = 0x7f as u8
453 g2[79] = 0x62 as u8
454 g2[80] = 0x86 as u8
455 g2[81] = 0x42 as u8
456 g2[82] = 0xc6 as u8
457 g2[83] = 0x41 as u8
458 g2[84] = 0x36 as u8
459 g2[85] = 0x35 as u8
460 g2[86] = 0xa0 as u8
461 g2[87] = 0x6a as u8
462 g2[88] = 0x21 as u8
463 g2[89] = 0x66 as u8
464 g2[90] = 0xbd as u8
465 g2[91] = 0x04 as u8
466 g2[92] = 0x02 as u8
467 g2[93] = 0x5b as u8
468 g2[94] = 0xd2 as u8
469 g2[95] = 0x4b as u8
470 g2[96] = 0xa8 as u8
471 g2[97] = 0x80 as u8
472 g2[98] = 0x7f as u8
473 g2[99] = 0x70 as u8
474 g2[100] = 0x63 as u8
475 g2[101] = 0x04 as u8
476 g2[102] = 0x86 as u8
477 g2[103] = 0xc4 as u8
478 g2[104] = 0x95 as u8
479 g2[105] = 0xb8 as u8
480 g2[106] = 0xee as u8
481 g2[107] = 0x46 as u8
482 g2[108] = 0x5e as u8
483 g2[109] = 0x93 as u8
484 g2[110] = 0x8b as u8
485 g2[111] = 0xec as u8
486 g2[112] = 0x4f as u8
487 g2[113] = 0xff as u8
488 g2[114] = 0xae as u8
489 g2[115] = 0xe4 as u8
490 g2[116] = 0xc4 as u8
491 g2[117] = 0x42 as u8
492 g2[118] = 0xd2 as u8
493 g2[119] = 0x41 as u8
494 g2[120] = 0xdb as u8
495 g2[121] = 0x8c as u8
496 g2[122] = 0xd7 as u8
497 g2[123] = 0x48 as u8
498 g2[124] = 0x0d as u8
499 g2[125] = 0x3d as u8
500 g2[126] = 0x0f as u8
501 g2[127] = 0xc7 as u8
502 g2[128] = 0x03 as u8
503 g2[129] = 0x18 as u8
504 g2[130] = 0x76 as u8
505 g2[131] = 0x30 as u8
506 g2[132] = 0xcd as u8
507 g2[133] = 0xd3 as u8
508 g2[134] = 0x65 as u8
509 g2[135] = 0xec as u8
510 g2[136] = 0xa0 as u8
511 g2[137] = 0x06 as u8
512 g2[138] = 0xe2 as u8
513 g2[139] = 0x46 as u8
514 g2[140] = 0xb2 as u8
515 g2[141] = 0xa3 as u8
516 g2[142] = 0x22 as u8
517 g2[143] = 0x3d as u8
518 g2[144] = 0x18 as u8
519 g2[145] = 0xbb as u8
520 g2[146] = 0x6e as u8
521 g2[147] = 0x6a as u8
522 g2[148] = 0x56 as u8
523 g2[149] = 0x26 as u8
524 g2[150] = 0x53 as u8
525 g2[151] = 0xa5 as u8
526 g2[152] = 0x47 as u8
527 g2[153] = 0x95 as u8
528 g2[154] = 0x35 as u8
529 g2[155] = 0xaa as u8
530 g2[156] = 0xed as u8
531 g2[157] = 0x9e as u8
532 g2[158] = 0xfa as u8
533 g2[159] = 0x7d as u8
534 g2[160] = 0xfd as u8
535 g2[161] = 0x02 as u8
536 g2[162] = 0x26 as u8
537 g2[163] = 0x4e as u8
538 g2[164] = 0x4c as u8
539 g2[165] = 0xc8 as u8
540 g2[166] = 0xb2 as u8
541 g2[167] = 0x00 as u8
542 g2[168] = 0x00 as u8
543 g2[169] = 0x00 as u8
544 let r2: *NxGzipResult = nx_gzip_inflate(g2, 170, 306)
545 if r2 == (0 as *NxGzipResult) { return 20 }
546 if r2.error_code != NX_GZ_OK { return 21 }
547 if r2.output_size != 178 { return 22 }
548 var i2: nx_int = 0
549 while i2 < 178 {
550 if ((r2.output_data[i2] as nx_int)&255) != ((e1[i2] as nx_int)&255) { return 23 }
551 i2 = i2 + 1
552 }
553
554 // ---- G3: corrupted CRC32 trailer -> CRC_MISMATCH ----
555 let g3: *u8 = (sys_mmap(168)) as *u8
556 g3[0] = 0x1f as u8
557 g3[1] = 0x8b as u8
558 g3[2] = 0x08 as u8
559 g3[3] = 0x00 as u8
560 g3[4] = 0x00 as u8
561 g3[5] = 0x00 as u8
562 g3[6] = 0x00 as u8
563 g3[7] = 0x00 as u8
564 g3[8] = 0x02 as u8
565 g3[9] = 0xff as u8
566 g3[10] = 0x35 as u8
567 g3[11] = 0x8e as u8
568 g3[12] = 0xb1 as u8
569 g3[13] = 0x0e as u8
570 g3[14] = 0xc2 as u8
571 g3[15] = 0x30 as u8
572 g3[16] = 0x10 as u8
573 g3[17] = 0x43 as u8
574 g3[18] = 0x7f as u8
575 g3[19] = 0xe5 as u8
576 g3[20] = 0x3e as u8
577 g3[21] = 0xa0 as u8
578 g3[22] = 0x34 as u8
579 g3[23] = 0x02 as u8
580 g3[24] = 0x36 as u8
581 g3[25] = 0x74 as u8
582 g3[26] = 0xca as u8
583 g3[27] = 0x52 as u8
584 g3[28] = 0x75 as u8
585 g3[29] = 0xe8 as u8
586 g3[30] = 0x4a as u8
587 g3[31] = 0x3b as u8
588 g3[32] = 0xb1 as u8
589 g3[33] = 0x25 as u8
590 g3[34] = 0xcd as u8
591 g3[35] = 0x91 as u8
592 g3[36] = 0x44 as u8
593 g3[37] = 0x82 as u8
594 g3[38] = 0x4b as u8
595 g3[39] = 0x94 as u8
596 g3[40] = 0x0b as u8
597 g3[41] = 0x20 as u8
598 g3[42] = 0xf8 as u8
599 g3[43] = 0x7a as u8
600 g3[44] = 0x22 as u8
601 g3[45] = 0x2a as u8
602 g3[46] = 0x24 as u8
603 g3[47] = 0x4f as u8
604 g3[48] = 0xf6 as u8
605 g3[49] = 0xb3 as u8
606 g3[50] = 0x65 as u8
607 g3[51] = 0x0c as u8
608 g3[52] = 0xf5 as u8
609 g3[53] = 0x7e as u8
610 g3[54] = 0xd3 as u8
611 g3[55] = 0x68 as u8
612 g3[56] = 0x93 as u8
613 g3[57] = 0x7b as u8
614 g3[58] = 0x6b as u8
615 g3[59] = 0x0c as u8
616 g3[60] = 0x7b as u8
617 g3[61] = 0x3d as u8
618 g3[62] = 0xa7 as u8
619 g3[63] = 0x27 as u8
620 g3[64] = 0x15 as u8
621 g3[65] = 0x8a as u8
622 g3[66] = 0x9e as u8
623 g3[67] = 0xc1 as u8
624 g3[68] = 0x7f as u8
625 g3[69] = 0x62 as u8
626 g3[70] = 0x86 as u8
627 g3[71] = 0x42 as u8
628 g3[72] = 0xc6 as u8
629 g3[73] = 0x41 as u8
630 g3[74] = 0x36 as u8
631 g3[75] = 0x35 as u8
632 g3[76] = 0xa0 as u8
633 g3[77] = 0x6a as u8
634 g3[78] = 0x21 as u8
635 g3[79] = 0x66 as u8
636 g3[80] = 0xbd as u8
637 g3[81] = 0x04 as u8
638 g3[82] = 0x02 as u8
639 g3[83] = 0x5b as u8
640 g3[84] = 0xd2 as u8
641 g3[85] = 0x4b as u8
642 g3[86] = 0xa8 as u8
643 g3[87] = 0x80 as u8
644 g3[88] = 0x7f as u8
645 g3[89] = 0x70 as u8
646 g3[90] = 0x63 as u8
647 g3[91] = 0x04 as u8
648 g3[92] = 0x86 as u8
649 g3[93] = 0xc4 as u8
650 g3[94] = 0x95 as u8
651 g3[95] = 0xb8 as u8
652 g3[96] = 0xee as u8
653 g3[97] = 0x46 as u8
654 g3[98] = 0x5e as u8
655 g3[99] = 0x93 as u8
656 g3[100] = 0x8b as u8
657 g3[101] = 0xec as u8
658 g3[102] = 0x4f as u8
659 g3[103] = 0xff as u8
660 g3[104] = 0xae as u8
661 g3[105] = 0xe4 as u8
662 g3[106] = 0xc4 as u8
663 g3[107] = 0x42 as u8
664 g3[108] = 0xd2 as u8
665 g3[109] = 0x41 as u8
666 g3[110] = 0xdb as u8
667 g3[111] = 0x8c as u8
668 g3[112] = 0xd7 as u8
669 g3[113] = 0x48 as u8
670 g3[114] = 0x0d as u8
671 g3[115] = 0x3d as u8
672 g3[116] = 0x0f as u8
673 g3[117] = 0xc7 as u8
674 g3[118] = 0x03 as u8
675 g3[119] = 0x18 as u8
676 g3[120] = 0x76 as u8
677 g3[121] = 0x30 as u8
678 g3[122] = 0xcd as u8
679 g3[123] = 0xd3 as u8
680 g3[124] = 0x65 as u8
681 g3[125] = 0xec as u8
682 g3[126] = 0xa0 as u8
683 g3[127] = 0x06 as u8
684 g3[128] = 0xe2 as u8
685 g3[129] = 0x46 as u8
686 g3[130] = 0xb2 as u8
687 g3[131] = 0xa3 as u8
688 g3[132] = 0x22 as u8
689 g3[133] = 0x3d as u8
690 g3[134] = 0x18 as u8
691 g3[135] = 0xbb as u8
692 g3[136] = 0x6e as u8
693 g3[137] = 0x6a as u8
694 g3[138] = 0x56 as u8
695 g3[139] = 0x26 as u8
696 g3[140] = 0x53 as u8
697 g3[141] = 0xa5 as u8
698 g3[142] = 0x47 as u8
699 g3[143] = 0x95 as u8
700 g3[144] = 0x35 as u8
701 g3[145] = 0xaa as u8
702 g3[146] = 0xed as u8
703 g3[147] = 0x9e as u8
704 g3[148] = 0xfa as u8
705 g3[149] = 0x7d as u8
706 g3[150] = 0xfd as u8
707 g3[151] = 0x02 as u8
708 g3[152] = 0xd9 as u8
709 g3[153] = 0x4e as u8
710 g3[154] = 0x4c as u8
711 g3[155] = 0xc8 as u8
712 g3[156] = 0xb2 as u8
713 g3[157] = 0x00 as u8
714 g3[158] = 0x00 as u8
715 g3[159] = 0x00 as u8
716 let r3: *NxGzipResult = nx_gzip_inflate(g3, 160, 306)
717 if r3 == (0 as *NxGzipResult) { return 30 }
718 if r3.error_code != NX_GZ_ERR_CRC_MISMATCH { return 31 }
719
720 // ---- G4: corrupted magic -> BAD_MAGIC ----
721 let g4: *u8 = (sys_mmap(168)) as *u8
722 g4[0] = 0x00 as u8
723 g4[1] = 0x8b as u8
724 g4[2] = 0x08 as u8
725 g4[3] = 0x00 as u8
726 g4[4] = 0x00 as u8
727 g4[5] = 0x00 as u8
728 g4[6] = 0x00 as u8
729 g4[7] = 0x00 as u8
730 g4[8] = 0x02 as u8
731 g4[9] = 0xff as u8
732 g4[10] = 0x35 as u8
733 g4[11] = 0x8e as u8
734 g4[12] = 0xb1 as u8
735 g4[13] = 0x0e as u8
736 g4[14] = 0xc2 as u8
737 g4[15] = 0x30 as u8
738 g4[16] = 0x10 as u8
739 g4[17] = 0x43 as u8
740 g4[18] = 0x7f as u8
741 g4[19] = 0xe5 as u8
742 g4[20] = 0x3e as u8
743 g4[21] = 0xa0 as u8
744 g4[22] = 0x34 as u8
745 g4[23] = 0x02 as u8
746 g4[24] = 0x36 as u8
747 g4[25] = 0x74 as u8
748 g4[26] = 0xca as u8
749 g4[27] = 0x52 as u8
750 g4[28] = 0x75 as u8
751 g4[29] = 0xe8 as u8
752 g4[30] = 0x4a as u8
753 g4[31] = 0x3b as u8
754 g4[32] = 0xb1 as u8
755 g4[33] = 0x25 as u8
756 g4[34] = 0xcd as u8
757 g4[35] = 0x91 as u8
758 g4[36] = 0x44 as u8
759 g4[37] = 0x82 as u8
760 g4[38] = 0x4b as u8
761 g4[39] = 0x94 as u8
762 g4[40] = 0x0b as u8
763 g4[41] = 0x20 as u8
764 g4[42] = 0xf8 as u8
765 g4[43] = 0x7a as u8
766 g4[44] = 0x22 as u8
767 g4[45] = 0x2a as u8
768 g4[46] = 0x24 as u8
769 g4[47] = 0x4f as u8
770 g4[48] = 0xf6 as u8
771 g4[49] = 0xb3 as u8
772 g4[50] = 0x65 as u8
773 g4[51] = 0x0c as u8
774 g4[52] = 0xf5 as u8
775 g4[53] = 0x7e as u8
776 g4[54] = 0xd3 as u8
777 g4[55] = 0x68 as u8
778 g4[56] = 0x93 as u8
779 g4[57] = 0x7b as u8
780 g4[58] = 0x6b as u8
781 g4[59] = 0x0c as u8
782 g4[60] = 0x7b as u8
783 g4[61] = 0x3d as u8
784 g4[62] = 0xa7 as u8
785 g4[63] = 0x27 as u8
786 g4[64] = 0x15 as u8
787 g4[65] = 0x8a as u8
788 g4[66] = 0x9e as u8
789 g4[67] = 0xc1 as u8
790 g4[68] = 0x7f as u8
791 g4[69] = 0x62 as u8
792 g4[70] = 0x86 as u8
793 g4[71] = 0x42 as u8
794 g4[72] = 0xc6 as u8
795 g4[73] = 0x41 as u8
796 g4[74] = 0x36 as u8
797 g4[75] = 0x35 as u8
798 g4[76] = 0xa0 as u8
799 g4[77] = 0x6a as u8
800 g4[78] = 0x21 as u8
801 g4[79] = 0x66 as u8
802 g4[80] = 0xbd as u8
803 g4[81] = 0x04 as u8
804 g4[82] = 0x02 as u8
805 g4[83] = 0x5b as u8
806 g4[84] = 0xd2 as u8
807 g4[85] = 0x4b as u8
808 g4[86] = 0xa8 as u8
809 g4[87] = 0x80 as u8
810 g4[88] = 0x7f as u8
811 g4[89] = 0x70 as u8
812 g4[90] = 0x63 as u8
813 g4[91] = 0x04 as u8
814 g4[92] = 0x86 as u8
815 g4[93] = 0xc4 as u8
816 g4[94] = 0x95 as u8
817 g4[95] = 0xb8 as u8
818 g4[96] = 0xee as u8
819 g4[97] = 0x46 as u8
820 g4[98] = 0x5e as u8
821 g4[99] = 0x93 as u8
822 g4[100] = 0x8b as u8
823 g4[101] = 0xec as u8
824 g4[102] = 0x4f as u8
825 g4[103] = 0xff as u8
826 g4[104] = 0xae as u8
827 g4[105] = 0xe4 as u8
828 g4[106] = 0xc4 as u8
829 g4[107] = 0x42 as u8
830 g4[108] = 0xd2 as u8
831 g4[109] = 0x41 as u8
832 g4[110] = 0xdb as u8
833 g4[111] = 0x8c as u8
834 g4[112] = 0xd7 as u8
835 g4[113] = 0x48 as u8
836 g4[114] = 0x0d as u8
837 g4[115] = 0x3d as u8
838 g4[116] = 0x0f as u8
839 g4[117] = 0xc7 as u8
840 g4[118] = 0x03 as u8
841 g4[119] = 0x18 as u8
842 g4[120] = 0x76 as u8
843 g4[121] = 0x30 as u8
844 g4[122] = 0xcd as u8
845 g4[123] = 0xd3 as u8
846 g4[124] = 0x65 as u8
847 g4[125] = 0xec as u8
848 g4[126] = 0xa0 as u8
849 g4[127] = 0x06 as u8
850 g4[128] = 0xe2 as u8
851 g4[129] = 0x46 as u8
852 g4[130] = 0xb2 as u8
853 g4[131] = 0xa3 as u8
854 g4[132] = 0x22 as u8
855 g4[133] = 0x3d as u8
856 g4[134] = 0x18 as u8
857 g4[135] = 0xbb as u8
858 g4[136] = 0x6e as u8
859 g4[137] = 0x6a as u8
860 g4[138] = 0x56 as u8
861 g4[139] = 0x26 as u8
862 g4[140] = 0x53 as u8
863 g4[141] = 0xa5 as u8
864 g4[142] = 0x47 as u8
865 g4[143] = 0x95 as u8
866 g4[144] = 0x35 as u8
867 g4[145] = 0xaa as u8
868 g4[146] = 0xed as u8
869 g4[147] = 0x9e as u8
870 g4[148] = 0xfa as u8
871 g4[149] = 0x7d as u8
872 g4[150] = 0xfd as u8
873 g4[151] = 0x02 as u8
874 g4[152] = 0x26 as u8
875 g4[153] = 0x4e as u8
876 g4[154] = 0x4c as u8
877 g4[155] = 0xc8 as u8
878 g4[156] = 0xb2 as u8
879 g4[157] = 0x00 as u8
880 g4[158] = 0x00 as u8
881 g4[159] = 0x00 as u8
882 let r4: *NxGzipResult = nx_gzip_inflate(g4, 160, 306)
883 if r4 == (0 as *NxGzipResult) { return 40 }
884 if r4.error_code != NX_GZ_ERR_BAD_MAGIC { return 41 }
885
886 return 0
887}