...

Text file src/github.com/tetratelabs/wazero/internal/integration_test/spectest/v1/testdata/binary-leb128.wast

Documentation: github.com/tetratelabs/wazero/internal/integration_test/spectest/v1/testdata

     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)

View as plain text