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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: test/mjsunit/wasm/grow-memory.js
diff --git a/test/mjsunit/wasm/grow-memory.js b/test/mjsunit/wasm/grow-memory.js
index ecc105ee0d1d589f85f08689446c8791a5b8cfe9..76e16f75299ea3a8d867e6dffecfc8cebeb8dcf2 100644
--- a/test/mjsunit/wasm/grow-memory.js
+++ b/test/mjsunit/wasm/grow-memory.js
@@ -38,6 +38,8 @@ function genGrowMemoryBuilder() {
return builder;
}
+// TODO(gdeepti): Generate tests programatically for all the sizes instead of
+// current implementation.
function testGrowMemoryReadWrite32() {
var builder = genGrowMemoryBuilder();
builder.addMemory(1, 1, false);
@@ -179,7 +181,7 @@ function testGrowMemoryReadWrite8() {
testGrowMemoryReadWrite8();
-function testGrowMemoryZeroInitialSize() {
+function testGrowMemoryZeroInitialSize32() {
var builder = genGrowMemoryBuilder();
var module = builder.instantiate();
var offset;
@@ -197,14 +199,62 @@ function testGrowMemoryZeroInitialSize() {
assertEquals(20, peek());
}
- //TODO(gdeepti): Fix tests with correct write boundaries
- //when runtime function is fixed.
+ for(offset = kPageSize - 3; offset <= kPageSize + 5; offset++) {
+ assertTraps(kTrapMemOutOfBounds, peek);
+ }
+}
+
+testGrowMemoryZeroInitialSize32();
+
+function testGrowMemoryZeroInitialSize16() {
+ var builder = genGrowMemoryBuilder();
+ var module = builder.instantiate();
+ var offset;
+ function peek() { return module.exports.load16(offset); }
+ function poke(value) { return module.exports.store16(offset, value); }
+ function growMem(pages) { return module.exports.grow_memory(pages); }
+
+ assertTraps(kTrapMemOutOfBounds, peek);
+ assertTraps(kTrapMemOutOfBounds, poke);
+
+ assertEquals(0, growMem(1));
+
+ for(offset = 0; offset <= kPageSize - 2; offset++) {
+ poke(20);
+ assertEquals(20, peek());
+ }
+
+ for(offset = kPageSize - 1; offset <= kPageSize + 5; offset++) {
+ assertTraps(kTrapMemOutOfBounds, peek);
+ }
+}
+
+testGrowMemoryZeroInitialSize16();
+
+function testGrowMemoryZeroInitialSize8() {
+ var builder = genGrowMemoryBuilder();
+ var module = builder.instantiate();
+ var offset;
+ function peek() { return module.exports.load8(offset); }
+ function poke(value) { return module.exports.store8(offset, value); }
+ function growMem(pages) { return module.exports.grow_memory(pages); }
+
+ assertTraps(kTrapMemOutOfBounds, peek);
+ assertTraps(kTrapMemOutOfBounds, poke);
+
+ assertEquals(0, growMem(1));
+
+ for(offset = 0; offset <= kPageSize - 1; offset++) {
+ poke(20);
+ assertEquals(20, peek());
+ }
+
for(offset = kPageSize; offset <= kPageSize + 5; offset++) {
assertTraps(kTrapMemOutOfBounds, peek);
}
}
-testGrowMemoryZeroInitialSize();
+testGrowMemoryZeroInitialSize8();
function testGrowMemoryTrapMaxPagesZeroInitialMemory() {
var builder = genGrowMemoryBuilder();

Powered by Google App Engine
This is Rietveld 408576698