Index: src/wasm/wasm-module.cc |
diff --git a/src/wasm/wasm-module.cc b/src/wasm/wasm-module.cc |
index f0598556b4838f9606108e7f4298b6968da72d50..32d365e388ca2d3f65d6f689c00e5f3080928583 100644 |
--- a/src/wasm/wasm-module.cc |
+++ b/src/wasm/wasm-module.cc |
@@ -1791,10 +1791,26 @@ class WasmInstanceBuilder { |
// If there was no imported WebAssembly.Memory object, create one. |
Handle<JSArrayBuffer> buffer(instance->get_memory_buffer(), |
isolate_); |
- memory_object = WasmMemoryObject::New( |
- isolate_, buffer, |
- (module_->max_mem_pages != 0) ? module_->max_mem_pages : -1); |
- instance->set_memory_object(*memory_object); |
+ if (!buffer.is_null() && buffer->has_guard_region()) { |
Eric Holk
2016/12/05 19:54:52
We talked about this offline, but I'm summarizing
gdeepti
2016/12/07 07:10:33
Summarizing offline discussions, previous interpre
|
+ // If guard pages are enabled, use a different buffer to create |
+ // the exported memory object. Using the same buffer will result |
+ // in the exported memory object having a handle to the buffer |
+ // associated with a live instance. |
+ Handle<JSArrayBuffer> new_buffer = |
+ isolate_->factory()->NewJSArrayBuffer(); |
+ JSArrayBuffer::Setup(new_buffer, isolate_, true, |
+ buffer->backing_store(), |
+ buffer->byte_length()->Number()); |
+ new_buffer->set_is_neuterable(false); |
+ new_buffer->set_has_guard_region(true); |
+ memory_object = WasmMemoryObject::New( |
+ isolate_, new_buffer, |
+ (module_->max_mem_pages != 0) ? module_->max_mem_pages : -1); |
+ } else { |
+ memory_object = WasmMemoryObject::New( |
+ isolate_, buffer, |
+ (module_->max_mem_pages != 0) ? module_->max_mem_pages : -1); |
+ } |
} else { |
memory_object = Handle<WasmMemoryObject>( |
instance->get_memory_object(), isolate_); |