...

Text file src/github.com/tetratelabs/wazero/internal/integration_test/spectest/v2/testdata/data.wast

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

     1;; Test the data section
     2
     3;; Syntax
     4
     5(module
     6  (memory $m 1)
     7  (data (i32.const 0))
     8  (data (i32.const 1) "a" "" "bcd")
     9  (data (offset (i32.const 0)))
    10  (data (offset (i32.const 0)) "" "a" "bc" "")
    11  (data (memory 0) (i32.const 0))
    12  (data (memory 0x0) (i32.const 1) "a" "" "bcd")
    13  (data (memory 0x000) (offset (i32.const 0)))
    14  (data (memory 0) (offset (i32.const 0)) "" "a" "bc" "")
    15  (data (memory $m) (i32.const 0))
    16  (data (memory $m) (i32.const 1) "a" "" "bcd")
    17  (data (memory $m) (offset (i32.const 0)))
    18  (data (memory $m) (offset (i32.const 0)) "" "a" "bc" "")
    19  (data $d1 (i32.const 0))
    20  (data $d2 (i32.const 1) "a" "" "bcd")
    21  (data $d3 (offset (i32.const 0)))
    22  (data $d4 (offset (i32.const 0)) "" "a" "bc" "")
    23  (data $d5 (memory 0) (i32.const 0))
    24  (data $d6 (memory 0x0) (i32.const 1) "a" "" "bcd")
    25  (data $d7 (memory 0x000) (offset (i32.const 0)))
    26  (data $d8 (memory 0) (offset (i32.const 0)) "" "a" "bc" "")
    27  (data $d9 (memory $m) (i32.const 0))
    28  (data $d10 (memory $m) (i32.const 1) "a" "" "bcd")
    29  (data $d11 (memory $m) (offset (i32.const 0)))
    30  (data $d12 (memory $m) (offset (i32.const 0)) "" "a" "bc" "")
    31)
    32
    33;; Basic use
    34
    35(module
    36  (memory 1)
    37  (data (i32.const 0) "a")
    38)
    39(module
    40  (import "spectest" "memory" (memory 1))
    41  (data (i32.const 0) "a")
    42)
    43
    44(module
    45  (memory 1)
    46  (data (i32.const 0) "a")
    47  (data (i32.const 3) "b")
    48  (data (i32.const 100) "cde")
    49  (data (i32.const 5) "x")
    50  (data (i32.const 3) "c")
    51)
    52(module
    53  (import "spectest" "memory" (memory 1))
    54  (data (i32.const 0) "a")
    55  (data (i32.const 1) "b")
    56  (data (i32.const 2) "cde")
    57  (data (i32.const 3) "f")
    58  (data (i32.const 2) "g")
    59  (data (i32.const 1) "h")
    60)
    61
    62(module
    63  (global (import "spectest" "global_i32") i32)
    64  (memory 1)
    65  (data (global.get 0) "a")
    66)
    67(module
    68  (global (import "spectest" "global_i32") i32)
    69  (import "spectest" "memory" (memory 1))
    70  (data (global.get 0) "a")
    71)
    72
    73(module
    74  (global $g (import "spectest" "global_i32") i32)
    75  (memory 1)
    76  (data (global.get $g) "a")
    77)
    78(module
    79  (global $g (import "spectest" "global_i32") i32)
    80  (import "spectest" "memory" (memory 1))
    81  (data (global.get $g) "a")
    82)
    83
    84(assert_invalid
    85  (module (memory 1) (global i32 (i32.const 0)) (data (global.get 0) "a"))
    86  "unknown global"
    87)
    88(assert_invalid
    89  (module (memory 1) (global $g i32 (i32.const 0)) (data (global.get $g) "a"))
    90  "unknown global"
    91)
    92
    93
    94;; Corner cases
    95
    96(module
    97  (memory 1)
    98  (data (i32.const 0) "a")
    99  (data (i32.const 0xffff) "b")
   100)
   101(module
   102  (import "spectest" "memory" (memory 1))
   103  (data (i32.const 0) "a")
   104  (data (i32.const 0xffff) "b")
   105)
   106
   107(module
   108  (memory 2)
   109  (data (i32.const 0x1_ffff) "a")
   110)
   111
   112(module
   113  (memory 0)
   114  (data (i32.const 0))
   115)
   116(module
   117  (import "spectest" "memory" (memory 0))
   118  (data (i32.const 0))
   119)
   120
   121(module
   122  (memory 0 0)
   123  (data (i32.const 0))
   124)
   125
   126(module
   127  (memory 1)
   128  (data (i32.const 0x1_0000) "")
   129)
   130
   131(module
   132  (memory 0)
   133  (data (i32.const 0) "" "")
   134)
   135(module
   136  (import "spectest" "memory" (memory 0))
   137  (data (i32.const 0) "" "")
   138)
   139
   140(module
   141  (memory 0 0)
   142  (data (i32.const 0) "" "")
   143)
   144
   145(module
   146  (import "spectest" "memory" (memory 0))
   147  (data (i32.const 0) "a")
   148)
   149
   150(module
   151  (import "spectest" "memory" (memory 0 3))
   152  (data (i32.const 0) "a")
   153)
   154
   155(module
   156  (global (import "spectest" "global_i32") i32)
   157  (import "spectest" "memory" (memory 0))
   158  (data (global.get 0) "a")
   159)
   160
   161(module
   162  (global (import "spectest" "global_i32") i32)
   163  (import "spectest" "memory" (memory 0 3))
   164  (data (global.get 0) "a")
   165)
   166
   167(module
   168  (import "spectest" "memory" (memory 0))
   169  (data (i32.const 1) "a")
   170)
   171
   172(module
   173  (import "spectest" "memory" (memory 0 3))
   174  (data (i32.const 1) "a")
   175)
   176
   177;; Invalid bounds for data
   178
   179(assert_trap
   180  (module
   181    (memory 0)
   182    (data (i32.const 0) "a")
   183  )
   184  "out of bounds memory access"
   185)
   186
   187(assert_trap
   188  (module
   189    (memory 0 0)
   190    (data (i32.const 0) "a")
   191  )
   192  "out of bounds memory access"
   193)
   194
   195(assert_trap
   196  (module
   197    (memory 0 1)
   198    (data (i32.const 0) "a")
   199  )
   200  "out of bounds memory access"
   201)
   202(assert_trap
   203  (module
   204    (memory 0)
   205    (data (i32.const 1))
   206  )
   207  "out of bounds memory access"
   208)
   209(assert_trap
   210  (module
   211    (memory 0 1)
   212    (data (i32.const 1))
   213  )
   214  "out of bounds memory access"
   215)
   216
   217;; This seems to cause a time-out on Travis.
   218(;assert_unlinkable
   219  (module
   220    (memory 0x10000)
   221    (data (i32.const 0xffffffff) "ab")
   222  )
   223  ""  ;; either out of memory or out of bounds
   224;)
   225
   226(assert_trap
   227  (module
   228    (global (import "spectest" "global_i32") i32)
   229    (memory 0)
   230    (data (global.get 0) "a")
   231  )
   232  "out of bounds memory access"
   233)
   234
   235(assert_trap
   236  (module
   237    (memory 1 2)
   238    (data (i32.const 0x1_0000) "a")
   239  )
   240  "out of bounds memory access"
   241)
   242(assert_trap
   243  (module
   244    (import "spectest" "memory" (memory 1))
   245    (data (i32.const 0x1_0000) "a")
   246  )
   247  "out of bounds memory access"
   248)
   249
   250(assert_trap
   251  (module
   252    (memory 2)
   253    (data (i32.const 0x2_0000) "a")
   254  )
   255  "out of bounds memory access"
   256)
   257
   258(assert_trap
   259  (module
   260    (memory 2 3)
   261    (data (i32.const 0x2_0000) "a")
   262  )
   263  "out of bounds memory access"
   264)
   265
   266(assert_trap
   267  (module
   268    (memory 1)
   269    (data (i32.const -1) "a")
   270  )
   271  "out of bounds memory access"
   272)
   273(assert_trap
   274  (module
   275    (import "spectest" "memory" (memory 1))
   276    (data (i32.const -1) "a")
   277  )
   278  "out of bounds memory access"
   279)
   280
   281(assert_trap
   282  (module
   283    (memory 2)
   284    (data (i32.const -100) "a")
   285  )
   286  "out of bounds memory access"
   287)
   288(assert_trap
   289  (module
   290    (import "spectest" "memory" (memory 1))
   291    (data (i32.const -100) "a")
   292  )
   293  "out of bounds memory access"
   294)
   295
   296;; Data without memory
   297
   298(assert_invalid
   299  (module
   300    (data (i32.const 0) "")
   301  )
   302  "unknown memory"
   303)
   304
   305;; Data segment with memory index 1 (only memory 0 available)
   306(assert_invalid
   307  (module binary
   308    "\00asm" "\01\00\00\00"
   309    "\05\03\01"                             ;; memory section
   310    "\00\00"                                ;; memory 0
   311    "\0b\07\01"                             ;; data section
   312    "\02\01\41\00\0b"                       ;; active data segment 0 for memory 1
   313    "\00"                                   ;; empty vec(byte)
   314  )
   315  "unknown memory 1"
   316)
   317
   318;; Data segment with memory index 0 (no memory section)
   319(assert_invalid
   320  (module binary
   321    "\00asm" "\01\00\00\00"
   322    "\0b\06\01"                             ;; data section
   323    "\00\41\00\0b"                          ;; active data segment 0 for memory 0
   324    "\00"                                   ;; empty vec(byte)
   325  )
   326  "unknown memory 0"
   327)
   328
   329;; Data segment with memory index 1 (no memory section)
   330(assert_invalid
   331  (module binary
   332    "\00asm" "\01\00\00\00"
   333    "\0b\07\01"                             ;; data section
   334    "\02\01\41\00\0b"                       ;; active data segment 0 for memory 1
   335    "\00"                                   ;; empty vec(byte)
   336  )
   337  "unknown memory 1"
   338)
   339
   340;; Data segment with memory index 1 and vec(byte) as above,
   341;; only memory 0 available.
   342(assert_invalid
   343  (module binary
   344    "\00asm" "\01\00\00\00"
   345    "\05\03\01"                             ;; memory section
   346    "\00\00"                                ;; memory 0
   347    "\0b\45\01"                             ;; data section
   348    "\02"                                   ;; active segment
   349    "\01"                                   ;; memory index
   350    "\41\00\0b"                             ;; offset constant expression
   351    "\3e"                                   ;; vec(byte) length
   352    "\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f"
   353    "\10\11\12\13\14\15\16\17\18\19\1a\1b\1c\1d\1e\1f"
   354    "\20\21\22\23\24\25\26\27\28\29\2a\2b\2c\2d\2e\2f"
   355    "\30\31\32\33\34\35\36\37\38\39\3a\3b\3c\3d"
   356  )
   357  "unknown memory 1"
   358)
   359
   360;; Data segment with memory index 1 and specially crafted vec(byte) after.
   361;; This is to detect incorrect validation where memory index is interpreted
   362;; as a flag followed by "\41" interpreted as the size of vec(byte)
   363;; with the expected number of bytes following.
   364(assert_invalid
   365  (module binary
   366    "\00asm" "\01\00\00\00"
   367    "\0b\45\01"                             ;; data section
   368    "\02"                                   ;; active segment
   369    "\01"                                   ;; memory index
   370    "\41\00\0b"                             ;; offset constant expression
   371    "\3e"                                   ;; vec(byte) length
   372    "\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f"
   373    "\10\11\12\13\14\15\16\17\18\19\1a\1b\1c\1d\1e\1f"
   374    "\20\21\22\23\24\25\26\27\28\29\2a\2b\2c\2d\2e\2f"
   375    "\30\31\32\33\34\35\36\37\38\39\3a\3b\3c\3d"
   376  )
   377  "unknown memory 1"
   378)
   379
   380
   381;; Invalid offsets
   382
   383(assert_invalid
   384  (module
   385    (memory 1)
   386    (data (i64.const 0))
   387  )
   388  "type mismatch"
   389)
   390
   391(assert_invalid
   392  (module
   393    (memory 1)
   394    (data (ref.null func))
   395  )
   396  "type mismatch"
   397)
   398
   399(assert_invalid
   400  (module 
   401    (memory 1)
   402    (data (offset (;empty instruction sequence;)))
   403  )
   404  "type mismatch"
   405)
   406
   407(assert_invalid
   408  (module
   409    (memory 1)
   410    (data (offset (i32.const 0) (i32.const 0)))
   411  )
   412  "type mismatch"
   413)
   414
   415(assert_invalid
   416  (module
   417    (global (import "test" "global-i32") i32)
   418    (memory 1)
   419    (data (offset (global.get 0) (global.get 0)))
   420  )
   421  "type mismatch"
   422)
   423
   424(assert_invalid
   425  (module
   426    (global (import "test" "global-i32") i32)
   427    (memory 1)
   428    (data (offset (global.get 0) (i32.const 0)))
   429  )
   430  "type mismatch"
   431)
   432
   433(assert_invalid
   434  (module
   435    (memory 1)
   436    (data (i32.ctz (i32.const 0)))
   437  )
   438  "constant expression required"
   439)
   440
   441(assert_invalid
   442  (module
   443    (memory 1)
   444    (data (nop))
   445  )
   446  "constant expression required"
   447)
   448
   449(assert_invalid
   450  (module
   451    (memory 1)
   452    (data (offset (nop) (i32.const 0)))
   453  )
   454  "constant expression required"
   455)
   456
   457(assert_invalid
   458  (module
   459    (memory 1)
   460    (data (offset (i32.const 0) (nop)))
   461  )
   462  "constant expression required"
   463)
   464
   465(assert_invalid
   466  (module
   467    (global $g (import "test" "g") (mut i32))
   468    (memory 1)
   469    (data (global.get $g))
   470  )
   471  "constant expression required"
   472)
   473
   474(assert_invalid
   475   (module 
   476     (memory 1)
   477     (data (global.get 0))
   478   )
   479   "unknown global 0"
   480)
   481
   482(assert_invalid
   483   (module
   484     (global (import "test" "global-i32") i32)
   485     (memory 1)
   486     (data (global.get 1))
   487   )
   488   "unknown global 1"
   489)
   490
   491(assert_invalid
   492   (module 
   493     (global (import "test" "global-mut-i32") (mut i32))
   494     (memory 1)
   495     (data (global.get 0))
   496   )
   497   "constant expression required"
   498)

View as plain text