Commit ace7d8d7 authored by Dominik Inführ's avatar Dominik Inführ Committed by Commit Bot

[snapshot] Ensure deterministic output with JSArrayBuffer extension

The JSArrayBuffer extension stores a pointer to native memory. Set it to
null before serialization and then restore the old value.

Bug: v8:10064
Change-Id: I11b6d5a02cad7da119308b280269a72e24ee2a80
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2029410Reviewed-by: 's avatarJakob Gruber <jgruber@chromium.org>
Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
Commit-Queue: Dominik Inführ <dinfuehr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#66046}
parent 767fff40
......@@ -301,8 +301,7 @@ HeapObject Deserializer::PostProcessNewObject(HeapObject obj,
}
} else if (obj.IsJSArrayBuffer()) {
JSArrayBuffer buffer = JSArrayBuffer::cast(obj);
buffer.set_extension(nullptr);
// Only fixup for the off-heap case. This may trigger GC.
// Postpone allocation of backing store to avoid triggering the GC.
if (buffer.backing_store() != nullptr) {
new_off_heap_array_buffers_.push_back(handle(buffer, isolate_));
}
......
......@@ -397,6 +397,7 @@ void Serializer::ObjectSerializer::SerializeJSArrayBuffer() {
// We cannot store byte_length larger than Smi range in the snapshot.
CHECK_LE(buffer.byte_length(), Smi::kMaxValue);
int32_t byte_length = static_cast<int32_t>(buffer.byte_length());
ArrayBufferExtension* extension = buffer.extension();
// The embedder-allocated backing store only exists for the off-heap case.
if (backing_store != nullptr) {
......@@ -405,9 +406,16 @@ void Serializer::ObjectSerializer::SerializeJSArrayBuffer() {
// a backing store address. On deserialization we re-set data pointer
// to proper value.
buffer.set_backing_store(reinterpret_cast<void*>(static_cast<size_t>(ref)));
// Ensure deterministic output by setting extension to null during
// serialization.
buffer.set_extension(nullptr);
}
SerializeObject();
buffer.set_backing_store(backing_store);
buffer.set_extension(extension);
}
void Serializer::ObjectSerializer::SerializeExternalString() {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment