[wasm] Fix page size constant + test limits on max pages.
BUG=chromium:801604 R=bbudge@chromium.org,titzer@chromium.org Change-Id: I5fa57d5f8ea288d7aef7d466cbf11df46c4dcd1d Reviewed-on: https://chromium-review.googlesource.com/869468 Reviewed-by: Ben Titzer <titzer@chromium.org> Reviewed-by: Bill Budge <bbudge@chromium.org> Commit-Queue: Brad Nelson <bradnelson@chromium.org> Cr-Commit-Position: refs/heads/master@{#50665}
This commit is contained in:
parent
594a1a0b6e
commit
183bc643b5
@ -826,7 +826,7 @@ void WebAssemblyMemoryGrow(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
||||
return;
|
||||
}
|
||||
uint32_t old_size =
|
||||
old_buffer->byte_length()->Number() / i::wasm::kSpecMaxWasmMemoryPages;
|
||||
old_buffer->byte_length()->Number() / i::wasm::kWasmPageSize;
|
||||
int64_t new_size64 = old_size + delta_size;
|
||||
if (delta_size < 0 || max_size64 < new_size64 || new_size64 < old_size) {
|
||||
thrower.RangeError(new_size64 < old_size ? "trying to shrink memory"
|
||||
|
@ -7,6 +7,9 @@
|
||||
load("test/mjsunit/wasm/wasm-constants.js");
|
||||
load("test/mjsunit/wasm/wasm-module-builder.js");
|
||||
|
||||
var kV8MaxWasmMemoryPages = 32767; // ~ 2 GiB
|
||||
var kSpecMaxWasmMemoryPages = 65536; // 4 GiB
|
||||
|
||||
(function testMemorySizeZero() {
|
||||
print("testMemorySizeZero()");
|
||||
var builder = new WasmModuleBuilder();
|
||||
@ -29,3 +32,38 @@ load("test/mjsunit/wasm/wasm-module-builder.js");
|
||||
var module = builder.instantiate();
|
||||
assertEquals(size, module.exports.memory_size());
|
||||
})();
|
||||
|
||||
(function testMemorySizeSpecMaxOk() {
|
||||
print("testMemorySizeV8Max()");
|
||||
var builder = new WasmModuleBuilder();
|
||||
builder.addMemory(1, kSpecMaxWasmMemoryPages, true);
|
||||
builder.addFunction("memory_size", kSig_i_v)
|
||||
.addBody([kExprMemorySize, kMemoryZero])
|
||||
.exportFunc();
|
||||
var module = builder.instantiate();
|
||||
assertEquals(1, module.exports.memory_size());
|
||||
})();
|
||||
|
||||
(function testMemorySizeV8MaxPlus1Throws() {
|
||||
print("testMemorySizeV8MaxPlus1Throws()");
|
||||
var builder = new WasmModuleBuilder();
|
||||
builder.addMemory(kV8MaxWasmMemoryPages + 1,
|
||||
kV8MaxWasmMemoryPages + 1, false);
|
||||
builder.addFunction("memory_size", kSig_i_v)
|
||||
.addBody([kExprMemorySize, kMemoryZero])
|
||||
.exportFunc();
|
||||
assertThrows(() => builder.instantiate());
|
||||
})();
|
||||
|
||||
(function testMemorySpecMaxOk() {
|
||||
print("testMemoryInitialMaxOk()");
|
||||
var mem = new WebAssembly.Memory(
|
||||
{initial: 1, maximum: kSpecMaxWasmMemoryPages});
|
||||
assertThrows(() => builder.instantiate());
|
||||
})();
|
||||
|
||||
(function testMemoryInitialMaxPlus1Throws() {
|
||||
print("testMemoryInitialMaxOk()");
|
||||
assertThrows(() => new WebAssembly.Memory(
|
||||
{initial: kV8WasmMaxMemoryPages + 1}));
|
||||
})();
|
||||
|
Loading…
Reference in New Issue
Block a user