...
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