...

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

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

     1(module
     2    (memory 1)
     3
     4    (func $addr_limit (result i32)
     5      (i32.mul (memory.size) (i32.const 0x10000))
     6    )
     7
     8    (func (export "store") (param $i i32) (param $v i32)
     9      (i32.store (i32.add (call $addr_limit) (local.get $i)) (local.get $v))
    10    )
    11
    12    (func (export "load") (param $i i32) (result i32)
    13      (i32.load (i32.add (call $addr_limit) (local.get $i)))
    14    )
    15
    16    (func (export "memory.grow") (param i32) (result i32)
    17      (memory.grow (local.get 0))
    18    )
    19)
    20
    21(assert_return (invoke "store" (i32.const -4) (i32.const 42)))
    22(assert_return (invoke "load" (i32.const -4)) (i32.const 42))
    23(assert_trap (invoke "store" (i32.const -3) (i32.const 0x12345678)) "out of bounds memory access")
    24(assert_trap (invoke "load" (i32.const -3)) "out of bounds memory access")
    25(assert_trap (invoke "store" (i32.const -2) (i32.const 13)) "out of bounds memory access")
    26(assert_trap (invoke "load" (i32.const -2)) "out of bounds memory access")
    27(assert_trap (invoke "store" (i32.const -1) (i32.const 13)) "out of bounds memory access")
    28(assert_trap (invoke "load" (i32.const -1)) "out of bounds memory access")
    29(assert_trap (invoke "store" (i32.const 0) (i32.const 13)) "out of bounds memory access")
    30(assert_trap (invoke "load" (i32.const 0)) "out of bounds memory access")
    31(assert_trap (invoke "store" (i32.const 0x80000000) (i32.const 13)) "out of bounds memory access")
    32(assert_trap (invoke "load" (i32.const 0x80000000)) "out of bounds memory access")
    33(assert_return (invoke "memory.grow" (i32.const 0x10001)) (i32.const -1))
    34
    35(module
    36  (memory 1)
    37  (data (i32.const 0) "abcdefgh")
    38  (data (i32.const 0xfff8) "abcdefgh")
    39
    40  (func (export "i32.load") (param $a i32) (result i32)
    41    (i32.load (local.get $a))
    42  )
    43  (func (export "i64.load") (param $a i32) (result i64)
    44    (i64.load (local.get $a))
    45  )
    46  (func (export "f32.load") (param $a i32) (result f32)
    47    (f32.load (local.get $a))
    48  )
    49  (func (export "f64.load") (param $a i32) (result f64)
    50    (f64.load (local.get $a))
    51  )
    52  (func (export "i32.load8_s") (param $a i32) (result i32)
    53    (i32.load8_s (local.get $a))
    54  )
    55  (func (export "i32.load8_u") (param $a i32) (result i32)
    56    (i32.load8_u (local.get $a))
    57  )
    58  (func (export "i32.load16_s") (param $a i32) (result i32)
    59    (i32.load16_s (local.get $a))
    60  )
    61  (func (export "i32.load16_u") (param $a i32) (result i32)
    62    (i32.load16_u (local.get $a))
    63  )
    64  (func (export "i64.load8_s") (param $a i32) (result i64)
    65    (i64.load8_s (local.get $a))
    66  )
    67  (func (export "i64.load8_u") (param $a i32) (result i64)
    68    (i64.load8_u (local.get $a))
    69  )
    70  (func (export "i64.load16_s") (param $a i32) (result i64)
    71    (i64.load16_s (local.get $a))
    72  )
    73  (func (export "i64.load16_u") (param $a i32) (result i64)
    74    (i64.load16_u (local.get $a))
    75  )
    76  (func (export "i64.load32_s") (param $a i32) (result i64)
    77    (i64.load32_s (local.get $a))
    78  )
    79  (func (export "i64.load32_u") (param $a i32) (result i64)
    80    (i64.load32_u (local.get $a))
    81  )
    82  (func (export "i32.store") (param $a i32) (param $v i32)
    83    (i32.store (local.get $a) (local.get $v))
    84  )
    85  (func (export "i64.store") (param $a i32) (param $v i64)
    86    (i64.store (local.get $a) (local.get $v))
    87  )
    88  (func (export "f32.store") (param $a i32) (param $v f32)
    89    (f32.store (local.get $a) (local.get $v))
    90  )
    91  (func (export "f64.store") (param $a i32) (param $v f64)
    92    (f64.store (local.get $a) (local.get $v))
    93  )
    94  (func (export "i32.store8") (param $a i32) (param $v i32)
    95    (i32.store8 (local.get $a) (local.get $v))
    96  )
    97  (func (export "i32.store16") (param $a i32) (param $v i32)
    98    (i32.store16 (local.get $a) (local.get $v))
    99  )
   100  (func (export "i64.store8") (param $a i32) (param $v i64)
   101    (i64.store8 (local.get $a) (local.get $v))
   102  )
   103  (func (export "i64.store16") (param $a i32) (param $v i64)
   104    (i64.store16 (local.get $a) (local.get $v))
   105  )
   106  (func (export "i64.store32") (param $a i32) (param $v i64)
   107    (i64.store32 (local.get $a) (local.get $v))
   108  )
   109)
   110
   111(assert_trap (invoke "i32.store" (i32.const 0x10000) (i32.const 0)) "out of bounds memory access")
   112(assert_trap (invoke "i32.store" (i32.const 0xffff) (i32.const 0)) "out of bounds memory access")
   113(assert_trap (invoke "i32.store" (i32.const 0xfffe) (i32.const 0)) "out of bounds memory access")
   114(assert_trap (invoke "i32.store" (i32.const 0xfffd) (i32.const 0)) "out of bounds memory access")
   115(assert_trap (invoke "i32.store" (i32.const -1) (i32.const 0)) "out of bounds memory access")
   116(assert_trap (invoke "i32.store" (i32.const -2) (i32.const 0)) "out of bounds memory access")
   117(assert_trap (invoke "i32.store" (i32.const -3) (i32.const 0)) "out of bounds memory access")
   118(assert_trap (invoke "i32.store" (i32.const -4) (i32.const 0)) "out of bounds memory access")
   119(assert_trap (invoke "i64.store" (i32.const 0x10000) (i64.const 0)) "out of bounds memory access")
   120(assert_trap (invoke "i64.store" (i32.const 0xffff) (i64.const 0)) "out of bounds memory access")
   121(assert_trap (invoke "i64.store" (i32.const 0xfffe) (i64.const 0)) "out of bounds memory access")
   122(assert_trap (invoke "i64.store" (i32.const 0xfffd) (i64.const 0)) "out of bounds memory access")
   123(assert_trap (invoke "i64.store" (i32.const 0xfffc) (i64.const 0)) "out of bounds memory access")
   124(assert_trap (invoke "i64.store" (i32.const 0xfffb) (i64.const 0)) "out of bounds memory access")
   125(assert_trap (invoke "i64.store" (i32.const 0xfffa) (i64.const 0)) "out of bounds memory access")
   126(assert_trap (invoke "i64.store" (i32.const 0xfff9) (i64.const 0)) "out of bounds memory access")
   127(assert_trap (invoke "i64.store" (i32.const -1) (i64.const 0)) "out of bounds memory access")
   128(assert_trap (invoke "i64.store" (i32.const -2) (i64.const 0)) "out of bounds memory access")
   129(assert_trap (invoke "i64.store" (i32.const -3) (i64.const 0)) "out of bounds memory access")
   130(assert_trap (invoke "i64.store" (i32.const -4) (i64.const 0)) "out of bounds memory access")
   131(assert_trap (invoke "i64.store" (i32.const -5) (i64.const 0)) "out of bounds memory access")
   132(assert_trap (invoke "i64.store" (i32.const -6) (i64.const 0)) "out of bounds memory access")
   133(assert_trap (invoke "i64.store" (i32.const -7) (i64.const 0)) "out of bounds memory access")
   134(assert_trap (invoke "i64.store" (i32.const -8) (i64.const 0)) "out of bounds memory access")
   135(assert_trap (invoke "f32.store" (i32.const 0x10000) (f32.const 0)) "out of bounds memory access")
   136(assert_trap (invoke "f32.store" (i32.const 0xffff) (f32.const 0)) "out of bounds memory access")
   137(assert_trap (invoke "f32.store" (i32.const 0xfffe) (f32.const 0)) "out of bounds memory access")
   138(assert_trap (invoke "f32.store" (i32.const 0xfffd) (f32.const 0)) "out of bounds memory access")
   139(assert_trap (invoke "f32.store" (i32.const -1) (f32.const 0)) "out of bounds memory access")
   140(assert_trap (invoke "f32.store" (i32.const -2) (f32.const 0)) "out of bounds memory access")
   141(assert_trap (invoke "f32.store" (i32.const -3) (f32.const 0)) "out of bounds memory access")
   142(assert_trap (invoke "f32.store" (i32.const -4) (f32.const 0)) "out of bounds memory access")
   143(assert_trap (invoke "f64.store" (i32.const 0x10000) (f64.const 0)) "out of bounds memory access")
   144(assert_trap (invoke "f64.store" (i32.const 0xffff) (f64.const 0)) "out of bounds memory access")
   145(assert_trap (invoke "f64.store" (i32.const 0xfffe) (f64.const 0)) "out of bounds memory access")
   146(assert_trap (invoke "f64.store" (i32.const 0xfffd) (f64.const 0)) "out of bounds memory access")
   147(assert_trap (invoke "f64.store" (i32.const 0xfffc) (f64.const 0)) "out of bounds memory access")
   148(assert_trap (invoke "f64.store" (i32.const 0xfffb) (f64.const 0)) "out of bounds memory access")
   149(assert_trap (invoke "f64.store" (i32.const 0xfffa) (f64.const 0)) "out of bounds memory access")
   150(assert_trap (invoke "f64.store" (i32.const 0xfff9) (f64.const 0)) "out of bounds memory access")
   151(assert_trap (invoke "f64.store" (i32.const -1) (f64.const 0)) "out of bounds memory access")
   152(assert_trap (invoke "f64.store" (i32.const -2) (f64.const 0)) "out of bounds memory access")
   153(assert_trap (invoke "f64.store" (i32.const -3) (f64.const 0)) "out of bounds memory access")
   154(assert_trap (invoke "f64.store" (i32.const -4) (f64.const 0)) "out of bounds memory access")
   155(assert_trap (invoke "f64.store" (i32.const -5) (f64.const 0)) "out of bounds memory access")
   156(assert_trap (invoke "f64.store" (i32.const -6) (f64.const 0)) "out of bounds memory access")
   157(assert_trap (invoke "f64.store" (i32.const -7) (f64.const 0)) "out of bounds memory access")
   158(assert_trap (invoke "f64.store" (i32.const -8) (f64.const 0)) "out of bounds memory access")
   159(assert_trap (invoke "i32.store8" (i32.const 0x10000) (i32.const 0)) "out of bounds memory access")
   160(assert_trap (invoke "i32.store8" (i32.const -1) (i32.const 0)) "out of bounds memory access")
   161(assert_trap (invoke "i32.store16" (i32.const 0x10000) (i32.const 0)) "out of bounds memory access")
   162(assert_trap (invoke "i32.store16" (i32.const 0xffff) (i32.const 0)) "out of bounds memory access")
   163(assert_trap (invoke "i32.store16" (i32.const -1) (i32.const 0)) "out of bounds memory access")
   164(assert_trap (invoke "i32.store16" (i32.const -2) (i32.const 0)) "out of bounds memory access")
   165(assert_trap (invoke "i64.store8" (i32.const 0x10000) (i64.const 0)) "out of bounds memory access")
   166(assert_trap (invoke "i64.store8" (i32.const -1) (i64.const 0)) "out of bounds memory access")
   167(assert_trap (invoke "i64.store16" (i32.const 0x10000) (i64.const 0)) "out of bounds memory access")
   168(assert_trap (invoke "i64.store16" (i32.const 0xffff) (i64.const 0)) "out of bounds memory access")
   169(assert_trap (invoke "i64.store16" (i32.const -1) (i64.const 0)) "out of bounds memory access")
   170(assert_trap (invoke "i64.store16" (i32.const -2) (i64.const 0)) "out of bounds memory access")
   171(assert_trap (invoke "i64.store32" (i32.const 0x10000) (i64.const 0)) "out of bounds memory access")
   172(assert_trap (invoke "i64.store32" (i32.const 0xffff) (i64.const 0)) "out of bounds memory access")
   173(assert_trap (invoke "i64.store32" (i32.const 0xfffe) (i64.const 0)) "out of bounds memory access")
   174(assert_trap (invoke "i64.store32" (i32.const 0xfffd) (i64.const 0)) "out of bounds memory access")
   175(assert_trap (invoke "i64.store32" (i32.const -1) (i64.const 0)) "out of bounds memory access")
   176(assert_trap (invoke "i64.store32" (i32.const -2) (i64.const 0)) "out of bounds memory access")
   177(assert_trap (invoke "i64.store32" (i32.const -3) (i64.const 0)) "out of bounds memory access")
   178(assert_trap (invoke "i64.store32" (i32.const -4) (i64.const 0)) "out of bounds memory access")
   179(assert_trap (invoke "i32.load" (i32.const 0x10000)) "out of bounds memory access")
   180(assert_trap (invoke "i32.load" (i32.const 0xffff)) "out of bounds memory access")
   181(assert_trap (invoke "i32.load" (i32.const 0xfffe)) "out of bounds memory access")
   182(assert_trap (invoke "i32.load" (i32.const 0xfffd)) "out of bounds memory access")
   183(assert_trap (invoke "i32.load" (i32.const -1)) "out of bounds memory access")
   184(assert_trap (invoke "i32.load" (i32.const -2)) "out of bounds memory access")
   185(assert_trap (invoke "i32.load" (i32.const -3)) "out of bounds memory access")
   186(assert_trap (invoke "i32.load" (i32.const -4)) "out of bounds memory access")
   187(assert_trap (invoke "i64.load" (i32.const 0x10000)) "out of bounds memory access")
   188(assert_trap (invoke "i64.load" (i32.const 0xffff)) "out of bounds memory access")
   189(assert_trap (invoke "i64.load" (i32.const 0xfffe)) "out of bounds memory access")
   190(assert_trap (invoke "i64.load" (i32.const 0xfffd)) "out of bounds memory access")
   191(assert_trap (invoke "i64.load" (i32.const 0xfffc)) "out of bounds memory access")
   192(assert_trap (invoke "i64.load" (i32.const 0xfffb)) "out of bounds memory access")
   193(assert_trap (invoke "i64.load" (i32.const 0xfffa)) "out of bounds memory access")
   194(assert_trap (invoke "i64.load" (i32.const 0xfff9)) "out of bounds memory access")
   195(assert_trap (invoke "i64.load" (i32.const -1)) "out of bounds memory access")
   196(assert_trap (invoke "i64.load" (i32.const -2)) "out of bounds memory access")
   197(assert_trap (invoke "i64.load" (i32.const -3)) "out of bounds memory access")
   198(assert_trap (invoke "i64.load" (i32.const -4)) "out of bounds memory access")
   199(assert_trap (invoke "i64.load" (i32.const -5)) "out of bounds memory access")
   200(assert_trap (invoke "i64.load" (i32.const -6)) "out of bounds memory access")
   201(assert_trap (invoke "i64.load" (i32.const -7)) "out of bounds memory access")
   202(assert_trap (invoke "i64.load" (i32.const -8)) "out of bounds memory access")
   203(assert_trap (invoke "f32.load" (i32.const 0x10000)) "out of bounds memory access")
   204(assert_trap (invoke "f32.load" (i32.const 0xffff)) "out of bounds memory access")
   205(assert_trap (invoke "f32.load" (i32.const 0xfffe)) "out of bounds memory access")
   206(assert_trap (invoke "f32.load" (i32.const 0xfffd)) "out of bounds memory access")
   207(assert_trap (invoke "f32.load" (i32.const -1)) "out of bounds memory access")
   208(assert_trap (invoke "f32.load" (i32.const -2)) "out of bounds memory access")
   209(assert_trap (invoke "f32.load" (i32.const -3)) "out of bounds memory access")
   210(assert_trap (invoke "f32.load" (i32.const -4)) "out of bounds memory access")
   211(assert_trap (invoke "f64.load" (i32.const 0x10000)) "out of bounds memory access")
   212(assert_trap (invoke "f64.load" (i32.const 0xffff)) "out of bounds memory access")
   213(assert_trap (invoke "f64.load" (i32.const 0xfffe)) "out of bounds memory access")
   214(assert_trap (invoke "f64.load" (i32.const 0xfffd)) "out of bounds memory access")
   215(assert_trap (invoke "f64.load" (i32.const 0xfffc)) "out of bounds memory access")
   216(assert_trap (invoke "f64.load" (i32.const 0xfffb)) "out of bounds memory access")
   217(assert_trap (invoke "f64.load" (i32.const 0xfffa)) "out of bounds memory access")
   218(assert_trap (invoke "f64.load" (i32.const 0xfff9)) "out of bounds memory access")
   219(assert_trap (invoke "f64.load" (i32.const -1)) "out of bounds memory access")
   220(assert_trap (invoke "f64.load" (i32.const -2)) "out of bounds memory access")
   221(assert_trap (invoke "f64.load" (i32.const -3)) "out of bounds memory access")
   222(assert_trap (invoke "f64.load" (i32.const -4)) "out of bounds memory access")
   223(assert_trap (invoke "f64.load" (i32.const -5)) "out of bounds memory access")
   224(assert_trap (invoke "f64.load" (i32.const -6)) "out of bounds memory access")
   225(assert_trap (invoke "f64.load" (i32.const -7)) "out of bounds memory access")
   226(assert_trap (invoke "f64.load" (i32.const -8)) "out of bounds memory access")
   227(assert_trap (invoke "i32.load8_s" (i32.const 0x10000)) "out of bounds memory access")
   228(assert_trap (invoke "i32.load8_s" (i32.const -1)) "out of bounds memory access")
   229(assert_trap (invoke "i32.load8_u" (i32.const 0x10000)) "out of bounds memory access")
   230(assert_trap (invoke "i32.load8_u" (i32.const -1)) "out of bounds memory access")
   231(assert_trap (invoke "i32.load16_s" (i32.const 0x10000)) "out of bounds memory access")
   232(assert_trap (invoke "i32.load16_s" (i32.const 0xffff)) "out of bounds memory access")
   233(assert_trap (invoke "i32.load16_s" (i32.const -1)) "out of bounds memory access")
   234(assert_trap (invoke "i32.load16_s" (i32.const -2)) "out of bounds memory access")
   235(assert_trap (invoke "i32.load16_u" (i32.const 0x10000)) "out of bounds memory access")
   236(assert_trap (invoke "i32.load16_u" (i32.const 0xffff)) "out of bounds memory access")
   237(assert_trap (invoke "i32.load16_u" (i32.const -1)) "out of bounds memory access")
   238(assert_trap (invoke "i32.load16_u" (i32.const -2)) "out of bounds memory access")
   239(assert_trap (invoke "i64.load8_s" (i32.const 0x10000)) "out of bounds memory access")
   240(assert_trap (invoke "i64.load8_s" (i32.const -1)) "out of bounds memory access")
   241(assert_trap (invoke "i64.load8_u" (i32.const 0x10000)) "out of bounds memory access")
   242(assert_trap (invoke "i64.load8_u" (i32.const -1)) "out of bounds memory access")
   243(assert_trap (invoke "i64.load16_s" (i32.const 0x10000)) "out of bounds memory access")
   244(assert_trap (invoke "i64.load16_s" (i32.const 0xffff)) "out of bounds memory access")
   245(assert_trap (invoke "i64.load16_s" (i32.const -1)) "out of bounds memory access")
   246(assert_trap (invoke "i64.load16_s" (i32.const -2)) "out of bounds memory access")
   247(assert_trap (invoke "i64.load16_u" (i32.const 0x10000)) "out of bounds memory access")
   248(assert_trap (invoke "i64.load16_u" (i32.const 0xffff)) "out of bounds memory access")
   249(assert_trap (invoke "i64.load16_u" (i32.const -1)) "out of bounds memory access")
   250(assert_trap (invoke "i64.load16_u" (i32.const -2)) "out of bounds memory access")
   251(assert_trap (invoke "i64.load32_s" (i32.const 0x10000)) "out of bounds memory access")
   252(assert_trap (invoke "i64.load32_s" (i32.const 0xffff)) "out of bounds memory access")
   253(assert_trap (invoke "i64.load32_s" (i32.const 0xfffe)) "out of bounds memory access")
   254(assert_trap (invoke "i64.load32_s" (i32.const 0xfffd)) "out of bounds memory access")
   255(assert_trap (invoke "i64.load32_s" (i32.const -1)) "out of bounds memory access")
   256(assert_trap (invoke "i64.load32_s" (i32.const -2)) "out of bounds memory access")
   257(assert_trap (invoke "i64.load32_s" (i32.const -3)) "out of bounds memory access")
   258(assert_trap (invoke "i64.load32_s" (i32.const -4)) "out of bounds memory access")
   259(assert_trap (invoke "i64.load32_u" (i32.const 0x10000)) "out of bounds memory access")
   260(assert_trap (invoke "i64.load32_u" (i32.const 0xffff)) "out of bounds memory access")
   261(assert_trap (invoke "i64.load32_u" (i32.const 0xfffe)) "out of bounds memory access")
   262(assert_trap (invoke "i64.load32_u" (i32.const 0xfffd)) "out of bounds memory access")
   263(assert_trap (invoke "i64.load32_u" (i32.const -1)) "out of bounds memory access")
   264(assert_trap (invoke "i64.load32_u" (i32.const -2)) "out of bounds memory access")
   265(assert_trap (invoke "i64.load32_u" (i32.const -3)) "out of bounds memory access")
   266(assert_trap (invoke "i64.load32_u" (i32.const -4)) "out of bounds memory access")
   267
   268;; No memory was changed
   269(assert_return (invoke "i64.load" (i32.const 0xfff8)) (i64.const 0x6867666564636261))
   270(assert_return (invoke "i64.load" (i32.const 0)) (i64.const 0x6867666564636261))
   271
   272;; Check that out of bounds store do not store partial data.
   273;; Zero last 8 bytes.
   274(assert_return (invoke "i64.store" (i32.const 0xfff8) (i64.const 0)))
   275(assert_trap (invoke "i32.store" (i32.const 0xfffd) (i32.const 0x12345678)) "out of bounds memory access")
   276(assert_return (invoke "i32.load" (i32.const 0xfffc)) (i32.const 0))
   277(assert_trap (invoke "i64.store" (i32.const 0xfff9) (i64.const 0x1234567890abcdef)) "out of bounds memory access")
   278(assert_return (invoke "i64.load" (i32.const 0xfff8)) (i64.const 0))
   279(assert_trap (invoke "f32.store" (i32.const 0xfffd) (f32.const 0x12345678)) "out of bounds memory access")
   280(assert_return (invoke "f32.load" (i32.const 0xfffc)) (f32.const 0))
   281(assert_trap (invoke "f64.store" (i32.const 0xfff9) (f64.const 0x1234567890abcdef)) "out of bounds memory access")
   282(assert_return (invoke "f64.load" (i32.const 0xfff8)) (f64.const 0))

View as plain text