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