6a4b16d0299eec765e2f0dd204caa79c87bb8af1
[platform/framework/web/lwnode.git] /
1 ;; Unsigned LEB128 can have non-minimal length
2 (module binary
3   "\00asm" "\01\00\00\00"
4   "\05\04\01"                          ;; Memory section with 1 entry
5   "\00\82\00"                          ;; no max, minimum 2
6 )
7 (module binary
8   "\00asm" "\01\00\00\00"
9   "\05\07\01"                          ;; Memory section with 1 entry
10   "\00\82\80\80\80\00"                 ;; no max, minimum 2
11 )
12 (module binary
13   "\00asm" "\01\00\00\00"
14   "\05\06\01"                          ;; Memory section with 1 entry
15   "\01\82\00"                          ;; minimum 2
16   "\82\00"                             ;; max 2
17 )
18 (module binary
19   "\00asm" "\01\00\00\00"
20   "\05\09\01"                          ;; Memory section with 1 entry
21   "\01\82\00"                          ;; minimum 2
22   "\82\80\80\80\00"                    ;; max 2
23 )
24 (module binary
25   "\00asm" "\01\00\00\00"
26   "\05\03\01"                          ;; Memory section with 1 entry
27   "\00\00"                             ;; no max, minimum 0
28   "\0b\07\01"                          ;; Data section with 1 entry
29   "\80\00"                             ;; Memory index 0, encoded with 2 bytes
30   "\41\00\0b\00"                       ;; (i32.const 0) with contents ""
31 )
32 (module binary
33   "\00asm" "\01\00\00\00"
34   "\04\04\01"                          ;; Table section with 1 entry
35   "\70\00\00"                          ;; no max, minimum 0, funcref
36   "\09\07\01"                          ;; Element section with 1 entry
37   "\80\00"                             ;; Table index 0, encoded with 2 bytes
38   "\41\00\0b\00"                       ;; (i32.const 0) with no elements
39 )
40 (module binary
41   "\00asm" "\01\00\00\00"
42   "\00"                                ;; custom section
43   "\8a\00"                             ;; section size 10, encoded with 2 bytes
44   "\01"                                ;; name byte count
45   "1"                                  ;; name
46   "23456789"                           ;; sequence of bytes
47 )
48 (module binary
49   "\00asm" "\01\00\00\00"
50   "\00"                                ;; custom section
51   "\0b"                                ;; section size
52   "\88\00"                             ;; name byte count 8, encoded with 2 bytes
53   "12345678"                           ;; name
54   "9"                                  ;; sequence of bytes
55 )
56 (module binary
57   "\00asm" "\01\00\00\00"
58   "\01\08\01"                          ;; type section
59   "\60"                                ;; func type
60   "\82\00"                             ;; num params 2, encoded with 2 bytes
61   "\7f\7e"                             ;; param type
62   "\01"                                ;; num results
63   "\7f"                                ;; result type
64 )
65 (module binary
66   "\00asm" "\01\00\00\00"
67   "\01\08\01"                          ;; type section
68   "\60"                                ;; func type
69   "\02"                                ;; num params
70   "\7f\7e"                             ;; param type
71   "\81\00"                             ;; num results 1, encoded with 2 bytes
72   "\7f"                                ;; result type
73 )
74 (module binary
75   "\00asm" "\01\00\00\00"
76   "\01\05\01"                          ;; type section
77   "\60\01\7f\00"                       ;; function type
78   "\02\17\01"                          ;; import section
79   "\88\00"                             ;; module name length 8, encoded with 2 bytes
80   "\73\70\65\63\74\65\73\74"           ;; module name
81   "\09"                                ;; entity name length
82   "\70\72\69\6e\74\5f\69\33\32"        ;; entity name
83   "\00"                                ;; import kind
84   "\00"                                ;; import signature index
85 )
86 (module binary
87   "\00asm" "\01\00\00\00"
88   "\01\05\01"                          ;; type section
89   "\60\01\7f\00"                       ;; function type
90   "\02\17\01"                          ;; import section
91   "\08"                                ;; module name length
92   "\73\70\65\63\74\65\73\74"           ;; module name
93   "\89\00"                             ;; entity name length 9, encoded with 2 bytes
94   "\70\72\69\6e\74\5f\69\33\32"        ;; entity name
95   "\00"                                ;; import kind
96   "\00"                                ;; import signature index
97 )
98 (module binary
99   "\00asm" "\01\00\00\00"
100   "\01\05\01"                          ;; type section
101   "\60\01\7f\00"                       ;; function type
102   "\02\17\01"                          ;; import section
103   "\08"                                ;; module name length
104   "\73\70\65\63\74\65\73\74"           ;; module name
105   "\09"                                ;; entity name length 9
106   "\70\72\69\6e\74\5f\69\33\32"        ;; entity name
107   "\00"                                ;; import kind
108   "\80\00"                             ;; import signature index, encoded with 2 bytes
109 )
110 (module binary
111   "\00asm" "\01\00\00\00"
112   "\01\04\01"                          ;; type section
113   "\60\00\00"                          ;; function type
114   "\03\03\01"                          ;; function section
115   "\80\00"                             ;; function 0 signature index, encoded with 2 bytes
116   "\0a\04\01"                          ;; code section
117   "\02\00\0b"                          ;; function body
118 )
119 (module binary
120   "\00asm" "\01\00\00\00"
121   "\01\04\01"                          ;; type section
122   "\60\00\00"                          ;; fun type
123   "\03\02\01\00"                       ;; function section
124   "\07\07\01"                          ;; export section
125   "\82\00"                             ;; string length 2, encoded with 2 bytes
126   "\66\31"                             ;; export name f1
127   "\00"                                ;; export kind
128   "\00"                                ;; export func index
129   "\0a\04\01"                          ;; code section
130   "\02\00\0b"                          ;; function body
131 )
132 (module binary
133   "\00asm" "\01\00\00\00"
134   "\01\04\01"                          ;; type section
135   "\60\00\00"                          ;; fun type
136   "\03\02\01\00"                       ;; function section
137   "\07\07\01"                          ;; export section
138   "\02"                                ;; string length 2
139   "\66\31"                             ;; export name f1
140   "\00"                                ;; export kind
141   "\80\00"                             ;; export func index, encoded with 2 bytes
142   "\0a\04\01"                          ;; code section
143   "\02\00\0b"                          ;; function body
144 )
145 (module binary
146   "\00asm" "\01\00\00\00"
147   "\01\04\01"                          ;; type section
148   "\60\00\00"                          ;; fun type
149   "\03\02\01\00"                       ;; function section
150   "\0a"                                ;; code section
151   "\05"                                ;; section size
152   "\81\00"                             ;; num functions, encoded with 2 bytes
153   "\02\00\0b"                          ;; function body
154 )
155
156 ;; Signed LEB128 can have non-minimal length
157 (module binary
158   "\00asm" "\01\00\00\00"
159   "\06\07\01"                          ;; Global section with 1 entry
160   "\7f\00"                             ;; i32, immutable
161   "\41\80\00"                          ;; i32.const 0
162   "\0b"                                ;; end
163 )
164 (module binary
165   "\00asm" "\01\00\00\00"
166   "\06\07\01"                          ;; Global section with 1 entry
167   "\7f\00"                             ;; i32, immutable
168   "\41\ff\7f"                          ;; i32.const -1
169   "\0b"                                ;; end
170 )
171 (module binary
172   "\00asm" "\01\00\00\00"
173   "\06\0a\01"                          ;; Global section with 1 entry
174   "\7f\00"                             ;; i32, immutable
175   "\41\80\80\80\80\00"                 ;; i32.const 0
176   "\0b"                                ;; end
177 )
178 (module binary
179   "\00asm" "\01\00\00\00"
180   "\06\0a\01"                          ;; Global section with 1 entry
181   "\7f\00"                             ;; i32, immutable
182   "\41\ff\ff\ff\ff\7f"                 ;; i32.const -1
183   "\0b"                                ;; end
184 )
185
186 (module binary
187   "\00asm" "\01\00\00\00"
188   "\06\07\01"                          ;; Global section with 1 entry
189   "\7e\00"                             ;; i64, immutable
190   "\42\80\00"                          ;; i64.const 0 with unused bits set
191   "\0b"                                ;; end
192 )
193 (module binary
194   "\00asm" "\01\00\00\00"
195   "\06\07\01"                          ;; Global section with 1 entry
196   "\7e\00"                             ;; i64, immutable
197   "\42\ff\7f"                          ;; i64.const -1 with unused bits unset
198   "\0b"                                ;; end
199 )
200 (module binary
201   "\00asm" "\01\00\00\00"
202   "\06\0f\01"                          ;; Global section with 1 entry
203   "\7e\00"                             ;; i64, immutable
204   "\42\80\80\80\80\80\80\80\80\80\00"  ;; i64.const 0 with unused bits set
205   "\0b"                                ;; end
206 )
207 (module binary
208   "\00asm" "\01\00\00\00"
209   "\06\0f\01"                          ;; Global section with 1 entry
210   "\7e\00"                             ;; i64, immutable
211   "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\7f"  ;; i64.const -1 with unused bits unset
212   "\0b"                                ;; end
213 )
214
215 ;; Unsigned LEB128 must not be overlong
216 (assert_malformed
217   (module binary
218     "\00asm" "\01\00\00\00"
219     "\05\08\01"                             ;; Memory section with 1 entry
220     "\00\82\80\80\80\80\80\80\80\80\80\00"  ;; no max, minimum 2 with one byte too many
221   )
222   "integer representation too long"
223 )
224 (assert_malformed
225   (module binary
226     "\00asm" "\01\00\00\00"
227     "\05\0a\01"                          ;; Memory section with 1 entry
228     "\01\82\00"                          ;; minimum 2
229     "\82\80\80\80\80\80\80\80\80\80\00"  ;; max 2 with one byte too many
230   )
231   "integer representation too long"
232 )
233 (assert_malformed
234   (module binary
235     "\00asm" "\01\00\00\00"
236     "\05\03\01"                          ;; Memory section with 1 entry
237     "\00\00"                             ;; no max, minimum 0
238     "\0b\0b\01"                          ;; Data section with 1 entry
239     "\80\80\80\80\80\00"                 ;; Memory index 0 with one byte too many
240     "\41\00\0b\00"                       ;; (i32.const 0) with contents ""
241   )
242   "integer representation too long"
243 )
244 (assert_malformed
245   (module binary
246     "\00asm" "\01\00\00\00"
247     "\04\04\01"                          ;; Table section with 1 entry
248     "\70\00\00"                          ;; no max, minimum 0, funcref
249     "\09\0b\01"                          ;; Element section with 1 entry
250     "\80\80\80\80\80\00"                 ;; Table index 0 with one byte too many
251     "\41\00\0b\00"                       ;; (i32.const 0) with no elements
252   )
253   "integer representation too long"
254 )
255 (assert_malformed
256   (module binary
257     "\00asm" "\01\00\00\00"
258     "\00"                                ;; custom section
259     "\83\80\80\80\80\00"                 ;; section size 3 with one byte too many
260     "\01"                                ;; name byte count
261     "1"                                  ;; name
262     "2"                                  ;; sequence of bytes
263   )
264   "integer representation too long"
265 )
266 (assert_malformed
267   (module binary
268     "\00asm" "\01\00\00\00"
269     "\00"                                ;; custom section
270     "\0A"                                ;; section size
271     "\83\80\80\80\80\00"                 ;; name byte count 3 with one byte too many
272     "123"                                ;; name
273     "4"                                  ;; sequence of bytes
274   )
275   "integer representation too long"
276 )
277 (assert_malformed
278   (module binary
279     "\00asm" "\01\00\00\00"
280     "\01\0c\01"                          ;; type section
281     "\60"                                ;; func type
282     "\82\80\80\80\80\00"                 ;; num params 2 with one byte too many
283     "\7f\7e"                             ;; param type
284     "\01"                                ;; num result
285     "\7f"                                ;; result type
286   )
287   "integer representation too long"
288 )
289 (assert_malformed
290   (module binary
291     "\00asm" "\01\00\00\00"
292     "\01\08\01"                          ;; type section
293     "\60"                                ;; func type
294     "\02"                                ;; num params
295     "\7f\7e"                             ;; param type
296     "\81\80\80\80\80\00"                 ;; num result 1 with one byte too many
297     "\7f"                                ;; result type
298   )
299   "integer representation too long"
300 )
301 (assert_malformed
302   (module binary
303     "\00asm" "\01\00\00\00"
304     "\01\05\01"                          ;; type section
305     "\60\01\7f\00"                       ;; function type
306     "\02\1b\01"                          ;; import section
307     "\88\80\80\80\80\00"                 ;; module name length 8 with one byte too many
308     "\73\70\65\63\74\65\73\74"           ;; module name
309     "\09"                                ;; entity name length
310     "\70\72\69\6e\74\5f\69\33\32"        ;; entity name
311     "\00"                                ;; import kind
312     "\00"                                ;; import signature index
313   )
314   "integer representation too long"
315 )
316 (assert_malformed
317   (module binary
318     "\00asm" "\01\00\00\00"
319     "\01\05\01"                          ;; type section
320     "\60\01\7f\00"                       ;; function type
321     "\02\1b\01"                          ;; import section
322     "\08"                                ;; module name length
323     "\73\70\65\63\74\65\73\74"           ;; module name
324     "\89\80\80\80\80\00"                 ;; entity name length 9 with one byte too many
325     "\70\72\69\6e\74\5f\69\33\32"        ;; entity name
326     "\00"                                ;; import kind
327     "\00"                                ;; import signature index
328   )
329   "integer representation too long"
330 )
331 (assert_malformed
332   (module binary
333     "\00asm" "\01\00\00\00"
334     "\01\05\01"                          ;; type section
335     "\60\01\7f\00"                       ;; function type
336     "\02\1b\01"                          ;; import section
337     "\08"                                ;; module name length
338     "\73\70\65\63\74\65\73\74"           ;; module name
339     "\09"                                ;; entity name length 9
340     "\70\72\69\6e\74\5f\69\33\32"        ;; entity name
341     "\00"                                ;; import kind
342     "\80\80\80\80\80\00"                 ;; import signature index 0 with one byte too many
343   )
344   "integer representation too long"
345 )
346 (assert_malformed
347   (module binary
348     "\00asm" "\01\00\00\00"
349     "\01\04\01"                          ;; type section
350     "\60\00\00"                          ;; function type
351     "\03\03\01"                          ;; function section
352     "\80\80\80\80\80\00"                 ;; function 0 signature index with one byte too many
353     "\0a\04\01"                          ;; code section
354     "\02\00\0b"                          ;; function body
355   )
356   "integer representation too long"
357 )
358 (assert_malformed
359   (module binary
360     "\00asm" "\01\00\00\00"
361     "\01\04\01"                          ;; type section
362     "\60\00\00"                          ;; fun type
363     "\03\02\01\00"                       ;; function section
364     "\07\0b\01"                          ;; export section
365     "\82\80\80\80\80\00"                 ;; string length 2 with one byte too many
366     "\66\31"                             ;; export name f1
367     "\00"                                ;; export kind
368     "\00"                                ;; export func index
369     "\0a\04\01"                          ;; code section
370     "\02\00\0b"                          ;; function body
371   )
372   "integer representation too long"
373 )
374 (assert_malformed
375   (module binary
376     "\00asm" "\01\00\00\00"
377     "\01\04\01"                          ;; type section
378     "\60\00\00"                          ;; fun type
379     "\03\02\01\00"                       ;; function section
380     "\07\0b\01"                          ;; export section
381     "\02"                                ;; string length 2
382     "\66\31"                             ;; export name f1
383     "\00"                                ;; export kind
384     "\80\80\80\80\80\00"                 ;; export func index 0 with one byte too many
385     "\0a\04\01"                          ;; code section
386     "\02\00\0b"                          ;; function body
387   )
388   "integer representation too long"
389 )
390 (assert_malformed
391   (module binary
392     "\00asm" "\01\00\00\00"
393     "\01\04\01"                          ;; type section
394     "\60\00\00"                          ;; fun type
395     "\03\02\01\00"                       ;; function section
396     "\0a"                                ;; code section
397     "\05"                                ;; section size
398     "\81\80\80\80\80\00"                 ;; num functions 1 with one byte too many
399     "\02\00\0b"                          ;; function body
400   )
401   "integer representation too long"
402 )
403 (assert_malformed
404   (module binary
405     "\00asm" "\01\00\00\00"
406     "\01\04\01\60\00\00"       ;; Type section
407     "\03\02\01\00"             ;; Function section
408     "\05\03\01\00\01"          ;; Memory section
409     "\0a\11\01"                ;; Code section
410     ;; function 0
411     "\0f\01\01"                ;; local type count
412     "\7f"                      ;; i32
413     "\41\00"                   ;; i32.const 0
414     "\28"                      ;; i32.load
415     "\02"                      ;; alignment 2
416     "\82\80\80\80\80\80\80\80\80\80\00"  ;; offset 2 with one byte too many
417     "\1a"                      ;; drop
418     "\0b"                      ;; end
419   )
420   "integer representation too long"
421 )
422 (assert_malformed
423   (module binary
424     "\00asm" "\01\00\00\00"
425     "\01\04\01\60\00\00"       ;; Type section
426     "\03\02\01\00"             ;; Function section
427     "\05\03\01\00\01"          ;; Memory section
428     "\0a\11\01"                ;; Code section
429     ;; function 0
430     "\0f\01\01"                ;; local type count
431     "\7f"                      ;; i32
432     "\41\00"                   ;; i32.const 0
433     "\28"                      ;; i32.load
434     "\82\80\80\80\80\00"       ;; alignment 2 with one byte too many
435     "\00"                      ;; offset 0
436     "\1a"                      ;; drop
437     "\0b"                      ;; end
438   )
439   "integer representation too long"
440 )
441 (assert_malformed
442   (module binary
443     "\00asm" "\01\00\00\00"
444     "\01\04\01\60\00\00"       ;; Type section
445     "\03\02\01\00"             ;; Function section
446     "\05\03\01\00\01"          ;; Memory section
447     "\0a\12\01"                ;; Code section
448     ;; function 0
449     "\10\01\01"                ;; local type count
450     "\7f"                      ;; i32
451     "\41\00"                   ;; i32.const 0
452     "\41\03"                   ;; i32.const 3
453     "\36"                      ;; i32.store
454     "\82\80\80\80\80\00"       ;; alignment 2 with one byte too many
455     "\03"                      ;; offset 3
456     "\0b"                      ;; end
457   )
458   "integer representation too long"
459 )
460 (assert_malformed
461   (module binary
462     "\00asm" "\01\00\00\00"
463     "\01\04\01\60\00\00"       ;; Type section
464     "\03\02\01\00"             ;; Function section
465     "\05\03\01\00\01"          ;; Memory section
466     "\0a\12\01"                ;; Code section
467     ;; function 0
468     "\10\01\01"                ;; local type count
469     "\7f"                      ;; i32
470     "\41\00"                   ;; i32.const 0
471     "\41\03"                   ;; i32.const 3
472     "\36"                      ;; i32.store
473     "\02"                      ;; alignment 2
474     "\82\80\80\80\80\80\80\80\80\80\00"  ;; offset 2 with one byte too many
475     "\0b"                      ;; end
476   )
477   "integer representation too long"
478 )
479
480 ;; Signed LEB128 must not be overlong
481 (assert_malformed
482   (module binary
483     "\00asm" "\01\00\00\00"
484     "\06\0b\01"                          ;; Global section with 1 entry
485     "\7f\00"                             ;; i32, immutable
486     "\41\80\80\80\80\80\00"              ;; i32.const 0 with one byte too many
487     "\0b"                                ;; end
488   )
489   "integer representation too long"
490 )
491 (assert_malformed
492   (module binary
493     "\00asm" "\01\00\00\00"
494     "\06\0b\01"                          ;; Global section with 1 entry
495     "\7f\00"                             ;; i32, immutable
496     "\41\ff\ff\ff\ff\ff\7f"              ;; i32.const -1 with one byte too many
497     "\0b"                                ;; end
498   )
499   "integer representation too long"
500 )
501
502 (assert_malformed
503   (module binary
504     "\00asm" "\01\00\00\00"
505     "\06\10\01"                          ;; Global section with 1 entry
506     "\7e\00"                             ;; i64, immutable
507     "\42\80\80\80\80\80\80\80\80\80\80\00"  ;; i64.const 0 with one byte too many
508     "\0b"                                ;; end
509   )
510   "integer representation too long"
511 )
512 (assert_malformed
513   (module binary
514     "\00asm" "\01\00\00\00"
515     "\06\10\01"                          ;; Global section with 1 entry
516     "\7e\00"                             ;; i64, immutable
517     "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\7f"  ;; i64.const -1 with one byte too many
518     "\0b"                                ;; end
519   )
520   "integer representation too long"
521 )
522
523 ;; Unsigned LEB128s zero-extend
524 (assert_malformed
525   (module binary
526     "\00asm" "\01\00\00\00"
527     "\05\07\01"                          ;; Memory section with 1 entry
528     "\00\82\80\80\80\80\80\80\80\80\70"  ;; no max, minimum 2 with unused bits set
529   )
530   "integer too large"
531 )
532 (assert_malformed
533   (module binary
534     "\00asm" "\01\00\00\00"
535     "\05\07\01"                          ;; Memory section with 1 entry
536     "\00\82\80\80\80\80\80\80\80\80\40"  ;; no max, minimum 2 with some unused bits set
537   )
538   "integer too large"
539 )
540 (assert_malformed
541   (module binary
542     "\00asm" "\01\00\00\00"
543     "\05\09\01"                          ;; Memory section with 1 entry
544     "\01\82\00"                          ;; minimum 2
545     "\82\80\80\80\80\80\80\80\80\10"     ;; max 2 with unused bits set
546   )
547   "integer too large"
548 )
549 (assert_malformed
550   (module binary
551     "\00asm" "\01\00\00\00"
552     "\05\09\01"                          ;; Memory section with 1 entry
553     "\01\82\00"                          ;; minimum 2
554     "\82\80\80\80\80\80\80\80\80\40"     ;; max 2 with some unused bits set
555   )
556   "integer too large"
557 )
558 (assert_malformed
559   (module binary
560     "\00asm" "\01\00\00\00"
561     "\05\03\01"                          ;; Memory section with 1 entry
562     "\00\00"                             ;; no max, minimum 0
563     "\0b\0a\01"                          ;; Data section with 1 entry
564     "\80\80\80\80\10"                    ;; Memory index 0 with unused bits set
565     "\41\00\0b\00"                       ;; (i32.const 0) with contents ""
566   )
567   "integer too large"
568 )
569 (assert_malformed
570   (module binary
571     "\00asm" "\01\00\00\00"
572     "\04\04\01"                          ;; Table section with 1 entry
573     "\70\00\00"                          ;; no max, minimum 0, funcref
574     "\09\0a\01"                          ;; Element section with 1 entry
575     "\80\80\80\80\10"                    ;; Table index 0 with unused bits set
576     "\41\00\0b\00"                       ;; (i32.const 0) with no elements
577   )
578   "integer too large"
579 )
580 (assert_malformed
581   (module binary
582     "\00asm" "\01\00\00\00"
583     "\00"                                ;; custom section
584     "\83\80\80\80\10"                    ;; section size 3 with unused bits set
585     "\01"                                ;; name byte count
586     "1"                                  ;; name
587     "2"                                  ;; sequence of bytes
588   )
589   "integer too large"
590 )
591 (assert_malformed
592   (module binary
593     "\00asm" "\01\00\00\00"
594     "\00"                                ;; custom section
595     "\09"                                ;; section size
596     "\83\80\80\80\40"                    ;; name byte count 3 with unused bits set
597     "123"                                ;; name
598     "4"                                  ;; sequence of bytes
599   )
600   "integer too large"
601 )
602 (assert_malformed
603   (module binary
604     "\00asm" "\01\00\00\00"
605     "\01\0b\01"                          ;; type section
606     "\60"                                ;; func type
607     "\82\80\80\80\10"                    ;; num params 2 with unused bits set
608     "\7f\7e"                             ;; param type
609     "\01"                                ;; num result
610     "\7f"                                ;; result type
611   )
612   "integer too large"
613 )
614 (assert_malformed
615   (module binary
616     "\00asm" "\01\00\00\00"
617     "\01\0b\01"                          ;; type section
618     "\60"                                ;; func type
619     "\02"                                ;; num params
620     "\7f\7e"                             ;; param type
621     "\81\80\80\80\40"                    ;; num result 1 with unused bits set
622     "\7f"                                ;; result type
623   )
624   "integer too large"
625 )
626 (assert_malformed
627   (module binary
628     "\00asm" "\01\00\00\00"
629     "\01\05\01"                          ;; type section
630     "\60\01\7f\00"                       ;; function type
631     "\02\1a\01"                          ;; import section
632     "\88\80\80\80\10"                    ;; module name length 8 with unused bits set
633     "\73\70\65\63\74\65\73\74"           ;; module name
634     "\09"                                ;; entity name length
635     "\70\72\69\6e\74\5f\69\33\32"        ;; entity name
636     "\00"                                ;; import kind
637     "\00"                                ;; import signature index
638   )
639   "integer too large"
640 )
641 (assert_malformed
642   (module binary
643     "\00asm" "\01\00\00\00"
644     "\01\05\01"                          ;; type section
645     "\60\01\7f\00"                       ;; function type
646     "\02\1a\01"                          ;; import section
647     "\08"                                ;; module name length
648     "\73\70\65\63\74\65\73\74"           ;; module name
649     "\89\80\80\80\40"                    ;; entity name length 9 with unused bits set
650     "\70\72\69\6e\74\5f\69\33\32"        ;; entity name
651     "\00"                                ;; import kind
652     "\00"                                ;; import signature index
653   )
654   "integer too large"
655 )
656 (assert_malformed
657 (module binary
658   "\00asm" "\01\00\00\00"
659   "\01\05\01"                          ;; type section
660   "\60\01\7f\00"                       ;; function type
661   "\02\1a\01"                          ;; import section
662   "\08"                                ;; module name length
663   "\73\70\65\63\74\65\73\74"           ;; module name
664   "\09"                                ;; entity name length 9
665   "\70\72\69\6e\74\5f\69\33\32"        ;; entity name
666   "\00"                                ;; import kind
667   "\80\80\80\80\10"                    ;; import signature index 0 with unused bits set
668 )
669   "integer too large"
670 )
671 (assert_malformed
672   (module binary
673     "\00asm" "\01\00\00\00"
674     "\01\04\01"                          ;; type section
675     "\60\00\00"                          ;; function type
676     "\03\06\01"                          ;; function section
677     "\80\80\80\80\10"                    ;; function 0 signature index with unused bits set
678     "\0a\04\01"                          ;; code section
679     "\02\00\0b"                          ;; function body
680   )
681   "integer too large"
682 )
683
684 (assert_malformed
685   (module binary
686     "\00asm" "\01\00\00\00"
687     "\01\04\01"                          ;; type section
688     "\60\00\00"                          ;; fun type
689     "\03\02\01\00"                       ;; function section
690     "\07\0a\01"                          ;; export section
691     "\82\80\80\80\10"                    ;; string length 2 with unused bits set
692     "\66\31"                             ;; export name f1
693     "\00"                                ;; export kind
694     "\00"                                ;; export func index
695     "\0a\04\01"                          ;; code section
696     "\02\00\0b"                          ;; function body
697   )
698   "integer too large"
699 )
700 (assert_malformed
701   (module binary
702     "\00asm" "\01\00\00\00"
703     "\01\04\01"                          ;; type section
704     "\60\00\00"                          ;; fun type
705     "\03\02\01\00"                       ;; function section
706     "\07\0a\01"                          ;; export section
707     "\02"                                ;; string length 2
708     "\66\31"                             ;; export name f1
709     "\00"                                ;; export kind
710     "\80\80\80\80\10"                    ;; export func index with unused bits set
711     "\0a\04\01"                          ;; code section
712     "\02\00\0b"                          ;; function body
713   )
714   "integer too large"
715 )
716 (assert_malformed
717   (module binary
718     "\00asm" "\01\00\00\00"
719     "\01\04\01"                          ;; type section
720     "\60\00\00"                          ;; fun type
721     "\03\02\01\00"                       ;; function section
722     "\0a"                                ;; code section
723     "\08"                                ;; section size
724     "\81\80\80\80\10"                    ;; num functions 1 with unused bits set
725     "\02\00\0b"                          ;; function body
726   )
727   "integer too large"
728 )
729 (assert_malformed
730   (module binary
731     "\00asm" "\01\00\00\00"
732     "\01\04\01\60\00\00"       ;; Type section
733     "\03\02\01\00"             ;; Function section
734     "\05\03\01\00\01"          ;; Memory section
735     "\0a\10\01"                ;; Code section
736     ;; function 0
737     "\0e\01\01"                ;; local type count
738     "\7f"                      ;; i32
739     "\41\00"                   ;; i32.const 0
740     "\28"                      ;; i32.load
741     "\02"                      ;; alignment 2
742     "\82\80\80\80\80\80\80\80\80\10"  ;; offset 2 with unused bits set
743     "\1a"                      ;; drop
744     "\0b"                      ;; end
745   )
746   "integer too large"
747 )
748 (assert_malformed
749   (module binary
750     "\00asm" "\01\00\00\00"
751     "\01\04\01\60\00\00"       ;; Type section
752     "\03\02\01\00"             ;; Function section
753     "\05\03\01\00\01"          ;; Memory section
754     "\0a\10\01"                ;; Code section
755     ;; function 0
756     "\0e\01\01"                ;; local type count
757     "\7f"                      ;; i32
758     "\41\00"                   ;; i32.const 0
759     "\28"                      ;; i32.load
760     "\02"                      ;; alignment 2
761     "\82\80\80\80\80\80\80\80\80\40"  ;; offset 2 with some unused bits set
762     "\1a"                      ;; drop
763     "\0b"                      ;; end
764   )
765   "integer too large"
766 )
767 (assert_malformed
768   (module binary
769     "\00asm" "\01\00\00\00"
770     "\01\04\01\60\00\00"       ;; Type section
771     "\03\02\01\00"             ;; Function section
772     "\05\03\01\00\01"          ;; Memory section
773     "\0a\10\01"                ;; Code section
774     "\0e\01\01"                ;; local type count
775     "\7f"                      ;; i32
776     "\41\00"                   ;; i32.const 0
777     "\28"                      ;; i32.load
778     "\82\80\80\80\10"          ;; alignment 2 with unused bits set
779     "\00"                      ;; offset 0
780     "\1a"                      ;; drop
781     "\0b"                      ;; end
782   )
783   "integer too large"
784 )
785 (assert_malformed
786   (module binary
787     "\00asm" "\01\00\00\00"
788     "\01\04\01\60\00\00"       ;; Type section
789     "\03\02\01\00"             ;; Function section
790     "\05\03\01\00\01"          ;; Memory section
791     "\0a\10\01"                ;; Code section
792     ;; function 0
793     "\0e\01\01"                ;; local type count
794     "\7f"                      ;; i32
795     "\41\00"                   ;; i32.const 0
796     "\28"                      ;; i32.load
797     "\82\80\80\80\40"          ;; alignment 2 with some unused bits set
798     "\00"                      ;; offset 0
799     "\1a"                      ;; drop
800     "\0b"                      ;; end
801   )
802   "integer too large"
803 )
804 (assert_malformed
805   (module binary
806     "\00asm" "\01\00\00\00"
807     "\01\04\01\60\00\00"       ;; Type section
808     "\03\02\01\00"             ;; Function section
809     "\05\03\01\00\01"          ;; Memory section
810     "\0a\11\01"                ;; Code section
811     ;; function 0
812     "\0f\01\01"                ;; local type count
813     "\7f"                      ;; i32
814     "\41\00"                   ;; i32.const 0
815     "\41\03"                   ;; i32.const 3
816     "\36"                      ;; i32.store
817     "\82\80\80\80\10"          ;; alignment 2 with unused bits set
818     "\03"                      ;; offset 3
819     "\0b"                      ;; end
820   )
821   "integer too large"
822 )
823 (assert_malformed
824   (module binary
825     "\00asm" "\01\00\00\00"
826     "\01\04\01\60\00\00"       ;; Type section
827     "\03\02\01\00"             ;; Function section
828     "\05\03\01\00\01"          ;; Memory section
829     "\0a\11\01"                ;; Code section
830     ;; function 0
831     "\0f\01\01"                ;; local type count
832     "\7f"                      ;; i32
833     "\41\00"                   ;; i32.const 0
834     "\41\03"                   ;; i32.const 3
835     "\36"                      ;; i32.store
836     "\82\80\80\80\40"          ;; alignment 2 with some unused bits set
837     "\03"                      ;; offset 3
838     "\0b"                      ;; end
839   )
840   "integer too large"
841 )
842 (assert_malformed
843   (module binary
844     "\00asm" "\01\00\00\00"
845     "\01\04\01\60\00\00"       ;; Type section
846     "\03\02\01\00"             ;; Function section
847     "\05\03\01\00\01"          ;; Memory section
848     "\0a\11\01"                ;; Code section
849     ;; function 0
850     "\0f\01\01"                ;; local type count
851     "\7f"                      ;; i32
852     "\41\00"                   ;; i32.const 0
853     "\41\03"                   ;; i32.const 3
854     "\36"                      ;; i32.store
855     "\02"                      ;; alignment 2
856     "\82\80\80\80\80\80\80\80\80\10"  ;; offset 2 with unused bits set
857     "\0b"                      ;; end
858   )
859   "integer too large"
860 )
861 (assert_malformed
862   (module binary
863     "\00asm" "\01\00\00\00"
864     "\01\04\01\60\00\00"       ;; Type section
865     "\03\02\01\00"             ;; Function section
866     "\05\03\01\00\01"          ;; Memory section
867     "\0a\11\01"                ;; Code section
868
869     ;; function 0
870     "\0f\01\01"                ;; local type count
871     "\7f"                      ;; i32
872     "\41\00"                   ;; i32.const 0
873     "\41\03"                   ;; i32.const 3
874     "\36"                      ;; i32.store
875     "\02"                      ;; alignment 2
876     "\82\80\80\80\80\80\80\80\80\40"  ;; offset 2 with some unused bits set
877     "\0b"                      ;; end
878   )
879   "integer too large"
880 )
881
882 ;; Signed LEB128s sign-extend
883 (assert_malformed
884   (module binary
885     "\00asm" "\01\00\00\00"
886     "\06\0a\01"                          ;; Global section with 1 entry
887     "\7f\00"                             ;; i32, immutable
888     "\41\80\80\80\80\70"                 ;; i32.const 0 with unused bits set
889     "\0b"                                ;; end
890   )
891   "integer too large"
892 )
893 (assert_malformed
894   (module binary
895     "\00asm" "\01\00\00\00"
896     "\06\0a\01"                          ;; Global section with 1 entry
897     "\7f\00"                             ;; i32, immutable
898     "\41\ff\ff\ff\ff\0f"                 ;; i32.const -1 with unused bits unset
899     "\0b"                                ;; end
900   )
901   "integer too large"
902 )
903 (assert_malformed
904   (module binary
905     "\00asm" "\01\00\00\00"
906     "\06\0a\01"                          ;; Global section with 1 entry
907     "\7f\00"                             ;; i32, immutable
908     "\41\80\80\80\80\1f"                 ;; i32.const 0 with some unused bits set
909     "\0b"                                ;; end
910   )
911   "integer too large"
912 )
913 (assert_malformed
914   (module binary
915     "\00asm" "\01\00\00\00"
916     "\06\0a\01"                          ;; Global section with 1 entry
917     "\7f\00"                             ;; i32, immutable
918     "\41\ff\ff\ff\ff\4f"                 ;; i32.const -1 with some unused bits unset
919     "\0b"                                ;; end
920   )
921   "integer too large"
922 )
923
924 (assert_malformed
925   (module binary
926     "\00asm" "\01\00\00\00"
927     "\06\0f\01"                          ;; Global section with 1 entry
928     "\7e\00"                             ;; i64, immutable
929     "\42\80\80\80\80\80\80\80\80\80\7e"  ;; i64.const 0 with unused bits set
930     "\0b"                                ;; end
931   )
932   "integer too large"
933 )
934 (assert_malformed
935   (module binary
936     "\00asm" "\01\00\00\00"
937     "\06\0f\01"                          ;; Global section with 1 entry
938     "\7e\00"                             ;; i64, immutable
939     "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\01"  ;; i64.const -1 with unused bits unset
940     "\0b"                                ;; end
941   )
942   "integer too large"
943 )
944 (assert_malformed
945   (module binary
946     "\00asm" "\01\00\00\00"
947     "\06\0f\01"                          ;; Global section with 1 entry
948     "\7e\00"                             ;; i64, immutable
949     "\42\80\80\80\80\80\80\80\80\80\02"  ;; i64.const 0 with some unused bits set
950     "\0b"                                ;; end
951   )
952   "integer too large"
953 )
954 (assert_malformed
955   (module binary
956     "\00asm" "\01\00\00\00"
957     "\06\0f\01"                          ;; Global section with 1 entry
958     "\7e\00"                             ;; i64, immutable
959     "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\41"  ;; i64.const -1 with some unused bits unset
960     "\0b"                                ;; end
961   )
962   "integer too large"
963 )
964
965
966 (module binary
967   "\00asm" "\01\00\00\00"
968   "\01\04\01"                          ;; type section
969   "\60\00\00"                          ;; empty function type
970   "\03\02\01"                          ;; function section
971   "\00"                                ;; function 0, type 0
972   "\0a\1b\01\19"                       ;; code section
973   "\00"                                ;; no locals
974   "\00"                                ;; unreachable
975   "\fc\80\00"                          ;; i32_trunc_sat_f32_s with 2 bytes
976   "\00"                                ;; unreachable
977   "\fc\81\80\00"                       ;; i32_trunc_sat_f32_u with 3 bytes
978   "\00"                                ;; unreachable
979   "\fc\86\80\80\00"                    ;; i64_trunc_sat_f64_s with 4 bytes
980   "\00"                                ;; unreachable
981   "\fc\87\80\80\80\00"                 ;; i64_trunc_sat_f64_u with 5 bytes
982   "\00"                                ;; unreachable
983   "\0b"                                ;; end
984 )
985
986 (assert_malformed
987   (module binary
988     "\00asm" "\01\00\00\00"
989     "\01\04\01"                          ;; type section
990     "\60\00\00"                          ;; empty function type
991     "\03\02\01"                          ;; function section
992     "\00"                                ;; function 0, type 0
993     "\0a\0d\01\0b"                       ;; code section
994     "\00"                                ;; no locals
995     "\00"                                ;; unreachable
996     "\fc\87\80\80\80\80\00"              ;; i64_trunc_sat_f64_u with 6 bytes
997     "\00"                                ;; unreachable
998     "\0b"                                ;; end
999   )
1000   "integer representation too long"
1001 )