github.com/tetratelabs/wazero@v1.7.3-0.20240513003603-48f702e154b5/internal/integration_test/spectest/v1/testdata/binary-leb128.wast (about)

     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\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\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\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\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\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\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\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\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\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\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      "\03"                      ;; alignment 2
   856      "\82\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\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  )