From 422dc378a1da528b97c9d69ae71ca4c9f318c970 Mon Sep 17 00:00:00 2001 From: Ray Wang Date: Mon, 27 Sep 2021 17:57:04 +0800 Subject: [PATCH] [deserialization] Remove unnecessarily limit on buffer size 1. Now there is no serializer/deserializer-specific buffer size limit. 2. Update AUTHORS Ref: https://github.com/nodejs/node/issues/40059 Change-Id: Iad4c6d8f68a91ef21d3c404fb7945949e69ad9e2 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3170411 Reviewed-by: Jakob Kummerow Reviewed-by: Clemens Backes Commit-Queue: Jakob Kummerow Cr-Commit-Position: refs/heads/main@{#77084} --- AUTHORS | 27 ++++++++++++++------------- src/api/api.cc | 26 ++------------------------ src/objects/value-serializer.cc | 2 +- 3 files changed, 17 insertions(+), 38 deletions(-) diff --git a/AUTHORS b/AUTHORS index 34bd4c57c695..7307ced9fc28 100644 --- a/AUTHORS +++ b/AUTHORS @@ -57,13 +57,12 @@ Alexis Campailla Allan Sandfeld Jensen Amos Lim Andreas Anyuru -Andrew Paprocki Andrei Kashcha +Andrew Paprocki Anna Henningsen Antoine du Hamel Anton Bikineev Bangfu Tao -Daniel Shelton Ben Coe Ben Newman Ben Noordhuis @@ -74,7 +73,6 @@ Brice Dobry Burcu Dogan Caitlin Potter Chao Wang -Craig Schlenter Charles Kerr Chengzhong Wu Choongwoo Han @@ -82,10 +80,12 @@ Chris Nardi Christopher A. Taylor Colin Ihrig Cong Zuo +Craig Schlenter Daniel Andersson Daniel Bevenius Daniel Dromboski Daniel James +Daniel Shelton Darshan Sen David Carlier David Manouchehri @@ -120,13 +120,13 @@ Ingvar Stepanyan Ioseb Dzmanashvili Isiah Meadows Jaime Bernardo -Jan de Mooij +James M Snell +James Pike Jan Krems +Jan de Mooij Janusz Majnert -Jay Freeman -James Pike -James M Snell Javad Amiri +Jay Freeman Jesper van den Ende Ji Qiu Jianghua Yang @@ -136,8 +136,8 @@ Joel Stanley Johan Bergström Jonathan Liu Julien Brianceau -Junha Park JunHo Seo +Junha Park Junming Huang Kang-Hao (Kenny) Lu Karl Skomski @@ -181,20 +181,21 @@ Oleksandr Chekhovskyi Oliver Dunk Paolo Giarrusso Patrick Gansterer +Paul Lind +Pavel Medvedev Peng Fei Peng Wu Peng-Yu Chen Peter Rybin Peter Varga Peter Wong -Paul Lind -Pavel Medvedev PhistucK Qingyan Li Qiuyi Zhang Rafal Krypa Raul Tambre Ray Glover +Ray Wang Refael Ackermann Rene Rebe Reza Yazdani @@ -219,11 +220,13 @@ Stefan Penner Stephan Hartmann Stephen Belanger Sylvestre Ledru +Takeshi Yoneda Taketoshi Aono Tao Liqiang Teddy Katz Thomas Young Tiancheng "Timothy" Gu +Tianping Yang Timo Teräs Tobias Burnus Tobias Nießen @@ -248,13 +251,11 @@ Yi Wang Yong Wang Youfeng Hao Yu Yin -Yusif Khudhur Yuri Iozzelli +Yusif Khudhur Zac Hansen Zeynep Cankara Zhao Jiazhong Zheng Liu Zhongping Wang 柳荣一 -Tianping Yang -Takeshi Yoneda diff --git a/src/api/api.cc b/src/api/api.cc index 8384cea3c4b2..f14d9764a11c 100644 --- a/src/api/api.cc +++ b/src/api/api.cc @@ -3369,7 +3369,6 @@ struct ValueDeserializer::PrivateData { : isolate(i), deserializer(i, data, delegate) {} i::Isolate* isolate; i::ValueDeserializer deserializer; - bool has_aborted = false; bool supports_legacy_wire_format = false; }; @@ -3379,16 +3378,8 @@ ValueDeserializer::ValueDeserializer(Isolate* isolate, const uint8_t* data, ValueDeserializer::ValueDeserializer(Isolate* isolate, const uint8_t* data, size_t size, Delegate* delegate) { - if (base::IsValueInRangeForNumericType(size)) { - private_ = new PrivateData( - reinterpret_cast(isolate), - base::Vector(data, static_cast(size)), delegate); - } else { - private_ = - new PrivateData(reinterpret_cast(isolate), - base::Vector(nullptr, 0), nullptr); - private_->has_aborted = true; - } + private_ = new PrivateData(reinterpret_cast(isolate), + base::Vector(data, size), delegate); } ValueDeserializer::~ValueDeserializer() { delete private_; } @@ -3398,15 +3389,6 @@ Maybe ValueDeserializer::ReadHeader(Local context) { ENTER_V8_NO_SCRIPT(isolate, context, ValueDeserializer, ReadHeader, Nothing(), i::HandleScope); - // We could have aborted during the constructor. - // If so, ReadHeader is where we report it. - if (private_->has_aborted) { - isolate->Throw(*isolate->factory()->NewError( - i::MessageTemplate::kDataCloneDeserializationError)); - has_pending_exception = true; - RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool); - } - bool read_header = false; has_pending_exception = !private_->deserializer.ReadHeader().To(&read_header); RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool); @@ -3430,12 +3412,10 @@ void ValueDeserializer::SetSupportsLegacyWireFormat( } uint32_t ValueDeserializer::GetWireFormatVersion() const { - CHECK(!private_->has_aborted); return private_->deserializer.GetWireFormatVersion(); } MaybeLocal ValueDeserializer::ReadValue(Local context) { - CHECK(!private_->has_aborted); PREPARE_FOR_EXECUTION(context, ValueDeserializer, ReadValue, Value); i::MaybeHandle result; if (GetWireFormatVersion() > 0) { @@ -3452,14 +3432,12 @@ MaybeLocal ValueDeserializer::ReadValue(Local context) { void ValueDeserializer::TransferArrayBuffer(uint32_t transfer_id, Local array_buffer) { - CHECK(!private_->has_aborted); private_->deserializer.TransferArrayBuffer(transfer_id, Utils::OpenHandle(*array_buffer)); } void ValueDeserializer::TransferSharedArrayBuffer( uint32_t transfer_id, Local shared_array_buffer) { - CHECK(!private_->has_aborted); private_->deserializer.TransferArrayBuffer( transfer_id, Utils::OpenHandle(*shared_array_buffer)); } diff --git a/src/objects/value-serializer.cc b/src/objects/value-serializer.cc index 7e4e878d9868..c8a0396198a1 100644 --- a/src/objects/value-serializer.cc +++ b/src/objects/value-serializer.cc @@ -1120,7 +1120,7 @@ ValueDeserializer::ValueDeserializer(Isolate* isolate, : isolate_(isolate), delegate_(delegate), position_(data.begin()), - end_(data.begin() + data.length()), + end_(data.end()), id_map_(isolate->global_handles()->Create( ReadOnlyRoots(isolate_).empty_fixed_array())) {}