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

Unified Diff: src/wasm/wasm-objects.cc

Issue 2917603002: [wasm] Fix WasmMemoryObject constructor for when a module has no initial memory (Closed)
Patch Set: Created 3 years, 7 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: src/wasm/wasm-objects.cc
diff --git a/src/wasm/wasm-objects.cc b/src/wasm/wasm-objects.cc
index 901e302f7e9324958abe2d2f572b065074f79e53..9d0f7654cad8be893a9c6cc02b682c108d93b193 100644
--- a/src/wasm/wasm-objects.cc
+++ b/src/wasm/wasm-objects.cc
@@ -409,9 +409,12 @@ Handle<WasmMemoryObject> WasmMemoryObject::New(Isolate* isolate,
Handle<JSObject> memory_obj =
isolate->factory()->NewJSObject(memory_ctor, TENURED);
memory_obj->SetEmbedderField(kWrapperTracerHeader, Smi::kZero);
- buffer.is_null() ? memory_obj->SetEmbedderField(
- kArrayBuffer, isolate->heap()->undefined_value())
- : memory_obj->SetEmbedderField(kArrayBuffer, *buffer);
+ if (buffer.is_null()) {
+ const bool enable_guard_regions = EnableGuardRegions();
+ buffer = SetupArrayBuffer(isolate, nullptr, 0, nullptr, 0, false,
+ enable_guard_regions);
+ }
+ memory_obj->SetEmbedderField(kArrayBuffer, *buffer);
Handle<Object> max = isolate->factory()->NewNumber(maximum);
memory_obj->SetEmbedderField(kMaximum, *max);
Handle<Symbol> memory_sym(isolate->native_context()->wasm_memory_sym());
@@ -419,8 +422,7 @@ Handle<WasmMemoryObject> WasmMemoryObject::New(Isolate* isolate,
return Handle<WasmMemoryObject>::cast(memory_obj);
}
-DEFINE_OPTIONAL_OBJ_ACCESSORS(WasmMemoryObject, buffer, kArrayBuffer,
- JSArrayBuffer)
+DEFINE_OBJ_ACCESSORS(WasmMemoryObject, buffer, kArrayBuffer, JSArrayBuffer)
DEFINE_OPTIONAL_OBJ_ACCESSORS(WasmMemoryObject, instances_link, kInstancesLink,
WasmInstanceWrapper)
@@ -467,14 +469,8 @@ void WasmMemoryObject::ResetInstancesLink(Isolate* isolate) {
int32_t WasmMemoryObject::Grow(Isolate* isolate,
Handle<WasmMemoryObject> memory_object,
uint32_t pages) {
- Handle<JSArrayBuffer> old_buffer;
- uint32_t old_size = 0;
- Address old_mem_start = nullptr;
- if (memory_object->has_buffer()) {
- old_buffer = handle(memory_object->buffer());
- old_size = old_buffer->byte_length()->Number();
- old_mem_start = static_cast<Address>(old_buffer->backing_store());
- }
+ Handle<JSArrayBuffer> old_buffer(memory_object->buffer());
+ uint32_t old_size = old_buffer->byte_length()->Number();
Clemens Hammacher 2017/05/31 07:56:37 Can you use "uint32_t old_size = 0; CHECK(old_buff
gdeepti 2017/06/01 07:01:37 Done.
Handle<JSArrayBuffer> new_buffer;
// Return current size if grow by 0.
if (pages == 0) {
@@ -515,6 +511,7 @@ int32_t WasmMemoryObject::Grow(Isolate* isolate,
if (new_buffer.is_null()) return -1;
DCHECK(!instance_wrapper->has_previous());
SetInstanceMemory(isolate, instance, new_buffer);
+ Address old_mem_start = static_cast<Address>(old_buffer->backing_store());
UncheckedUpdateInstanceMemory(isolate, instance, old_mem_start, old_size);
while (instance_wrapper->has_next()) {
instance_wrapper = instance_wrapper->next_wrapper();

Powered by Google App Engine
This is Rietveld 408576698