Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(33)

Side by Side Diff: test/mjsunit/wasm/grow-memory.js

Issue 2416543002: [wasm] Fix bounds check for zero initial memory. (Closed)
Patch Set: Add aTODO Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Flags: --expose-wasm --expose-gc --stress-compaction 5 // Flags: --expose-wasm --expose-gc --stress-compaction
6 6
7 load("test/mjsunit/wasm/wasm-constants.js"); 7 load("test/mjsunit/wasm/wasm-constants.js");
8 load("test/mjsunit/wasm/wasm-module-builder.js"); 8 load("test/mjsunit/wasm/wasm-module-builder.js");
9 9
10 var kPageSize = 0x10000; 10 var kPageSize = 0x10000;
(...skipping 20 matching lines...) Expand all
31 builder.addFunction("load8", kSig_i_i) 31 builder.addFunction("load8", kSig_i_i)
32 .addBody([kExprGetLocal, 0, kExprI32LoadMem8U, 0, 0]) 32 .addBody([kExprGetLocal, 0, kExprI32LoadMem8U, 0, 0])
33 .exportFunc(); 33 .exportFunc();
34 builder.addFunction("store8", kSig_i_ii) 34 builder.addFunction("store8", kSig_i_ii)
35 .addBody([kExprGetLocal, 0, kExprGetLocal, 1, kExprI32StoreMem8, 0, 0, 35 .addBody([kExprGetLocal, 0, kExprGetLocal, 1, kExprI32StoreMem8, 0, 0,
36 kExprGetLocal, 1]) 36 kExprGetLocal, 1])
37 .exportFunc(); 37 .exportFunc();
38 return builder; 38 return builder;
39 } 39 }
40 40
41 // TODO(gdeepti): Generate tests programatically for all the sizes instead of
42 // current implementation.
41 function testGrowMemoryReadWrite32() { 43 function testGrowMemoryReadWrite32() {
42 var builder = genGrowMemoryBuilder(); 44 var builder = genGrowMemoryBuilder();
43 builder.addMemory(1, 1, false); 45 builder.addMemory(1, 1, false);
44 var module = builder.instantiate(); 46 var module = builder.instantiate();
45 var offset; 47 var offset;
46 function peek() { return module.exports.load(offset); } 48 function peek() { return module.exports.load(offset); }
47 function poke(value) { return module.exports.store(offset, value); } 49 function poke(value) { return module.exports.store(offset, value); }
48 function growMem(pages) { return module.exports.grow_memory(pages); } 50 function growMem(pages) { return module.exports.grow_memory(pages); }
49 51
50 for(offset = 0; offset <= (kPageSize - 4); offset+=4) { 52 for(offset = 0; offset <= (kPageSize - 4); offset+=4) {
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 assertEquals(20, peek()); 174 assertEquals(20, peek());
173 } 175 }
174 for (offset = 19*kPageSize; offset < 19*kPageSize + 5; offset++) { 176 for (offset = 19*kPageSize; offset < 19*kPageSize + 5; offset++) {
175 assertTraps(kTrapMemOutOfBounds, poke); 177 assertTraps(kTrapMemOutOfBounds, poke);
176 assertTraps(kTrapMemOutOfBounds, peek); 178 assertTraps(kTrapMemOutOfBounds, peek);
177 } 179 }
178 } 180 }
179 181
180 testGrowMemoryReadWrite8(); 182 testGrowMemoryReadWrite8();
181 183
182 function testGrowMemoryZeroInitialSize() { 184 function testGrowMemoryZeroInitialSize32() {
183 var builder = genGrowMemoryBuilder(); 185 var builder = genGrowMemoryBuilder();
184 var module = builder.instantiate(); 186 var module = builder.instantiate();
185 var offset; 187 var offset;
186 function peek() { return module.exports.load(offset); } 188 function peek() { return module.exports.load(offset); }
187 function poke(value) { return module.exports.store(offset, value); } 189 function poke(value) { return module.exports.store(offset, value); }
188 function growMem(pages) { return module.exports.grow_memory(pages); } 190 function growMem(pages) { return module.exports.grow_memory(pages); }
189 191
190 assertTraps(kTrapMemOutOfBounds, peek); 192 assertTraps(kTrapMemOutOfBounds, peek);
191 assertTraps(kTrapMemOutOfBounds, poke); 193 assertTraps(kTrapMemOutOfBounds, poke);
192 194
193 assertEquals(0, growMem(1)); 195 assertEquals(0, growMem(1));
194 196
195 for(offset = 0; offset <= kPageSize - 4; offset++) { 197 for(offset = 0; offset <= kPageSize - 4; offset++) {
196 poke(20); 198 poke(20);
197 assertEquals(20, peek()); 199 assertEquals(20, peek());
198 } 200 }
199 201
200 //TODO(gdeepti): Fix tests with correct write boundaries 202 for(offset = kPageSize - 3; offset <= kPageSize + 5; offset++) {
201 //when runtime function is fixed. 203 assertTraps(kTrapMemOutOfBounds, peek);
204 }
205 }
206
207 testGrowMemoryZeroInitialSize32();
208
209 function testGrowMemoryZeroInitialSize16() {
210 var builder = genGrowMemoryBuilder();
211 var module = builder.instantiate();
212 var offset;
213 function peek() { return module.exports.load16(offset); }
214 function poke(value) { return module.exports.store16(offset, value); }
215 function growMem(pages) { return module.exports.grow_memory(pages); }
216
217 assertTraps(kTrapMemOutOfBounds, peek);
218 assertTraps(kTrapMemOutOfBounds, poke);
219
220 assertEquals(0, growMem(1));
221
222 for(offset = 0; offset <= kPageSize - 2; offset++) {
223 poke(20);
224 assertEquals(20, peek());
225 }
226
227 for(offset = kPageSize - 1; offset <= kPageSize + 5; offset++) {
228 assertTraps(kTrapMemOutOfBounds, peek);
229 }
230 }
231
232 testGrowMemoryZeroInitialSize16();
233
234 function testGrowMemoryZeroInitialSize8() {
235 var builder = genGrowMemoryBuilder();
236 var module = builder.instantiate();
237 var offset;
238 function peek() { return module.exports.load8(offset); }
239 function poke(value) { return module.exports.store8(offset, value); }
240 function growMem(pages) { return module.exports.grow_memory(pages); }
241
242 assertTraps(kTrapMemOutOfBounds, peek);
243 assertTraps(kTrapMemOutOfBounds, poke);
244
245 assertEquals(0, growMem(1));
246
247 for(offset = 0; offset <= kPageSize - 1; offset++) {
248 poke(20);
249 assertEquals(20, peek());
250 }
251
202 for(offset = kPageSize; offset <= kPageSize + 5; offset++) { 252 for(offset = kPageSize; offset <= kPageSize + 5; offset++) {
203 assertTraps(kTrapMemOutOfBounds, peek); 253 assertTraps(kTrapMemOutOfBounds, peek);
204 } 254 }
205 } 255 }
206 256
207 testGrowMemoryZeroInitialSize(); 257 testGrowMemoryZeroInitialSize8();
208 258
209 function testGrowMemoryTrapMaxPagesZeroInitialMemory() { 259 function testGrowMemoryTrapMaxPagesZeroInitialMemory() {
210 var builder = genGrowMemoryBuilder(); 260 var builder = genGrowMemoryBuilder();
211 var module = builder.instantiate(); 261 var module = builder.instantiate();
212 var maxPages = 16385; 262 var maxPages = 16385;
213 function growMem(pages) { return module.exports.grow_memory(pages); } 263 function growMem(pages) { return module.exports.grow_memory(pages); }
214 assertEquals(-1, growMem(maxPages)); 264 assertEquals(-1, growMem(maxPages));
215 } 265 }
216 266
217 testGrowMemoryTrapMaxPagesZeroInitialMemory(); 267 testGrowMemoryTrapMaxPagesZeroInitialMemory();
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 poke(0xaced); 401 poke(0xaced);
352 assertEquals(0xaced, peek()); 402 assertEquals(0xaced, peek());
353 } 403 }
354 404
355 for (offset = 4*kPageSize - 3; offset <= 4*kPageSize + 4; offset++) { 405 for (offset = 4*kPageSize - 3; offset <= 4*kPageSize + 4; offset++) {
356 assertTraps(kTrapMemOutOfBounds, poke); 406 assertTraps(kTrapMemOutOfBounds, poke);
357 } 407 }
358 } 408 }
359 409
360 testGrowMemoryOutOfBoundsOffset(); 410 testGrowMemoryOutOfBoundsOffset();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698