@@ -328,6 +328,7 @@ class SerializerDelegate : public ValueSerializer::Delegate {
328328 if (JSTransferable::IsJSTransferable (env_, context_, object)) {
329329 BaseObjectPtr<JSTransferable> js_transferable =
330330 JSTransferable::Wrap (env_, object);
331+ if (!js_transferable) return Nothing<bool >();
331332 return WriteHostObject (js_transferable);
332333 }
333334
@@ -550,6 +551,7 @@ Maybe<bool> Message::Serialize(Environment* env,
550551 return Nothing<bool >();
551552 }
552553 host_object = JSTransferable::Wrap (env, entry);
554+ if (!host_object) return Nothing<bool >();
553555 }
554556
555557 if (env->message_port_constructor_template ()->HasInstance (entry) &&
@@ -1245,27 +1247,38 @@ Local<FunctionTemplate> GetMessagePortConstructorTemplate(
12451247BaseObjectPtr<JSTransferable> JSTransferable::Wrap (Environment* env,
12461248 Local<Object> target) {
12471249 Local<Context> context = env->context ();
1248- Local<Value> wrapper_val =
1249- target->GetPrivate (context, env->js_transferable_wrapper_private_symbol ())
1250- .ToLocalChecked ();
1250+ Local<Value> wrapper_val;
1251+ if (!target
1252+ ->GetPrivate (context, env->js_transferable_wrapper_private_symbol ())
1253+ .ToLocal (&wrapper_val)) {
1254+ return {};
1255+ }
12511256 DCHECK (wrapper_val->IsObject () || wrapper_val->IsUndefined ());
12521257 BaseObjectPtr<JSTransferable> wrapper;
12531258 if (wrapper_val->IsObject ()) {
12541259 wrapper =
12551260 BaseObjectPtr<JSTransferable>{Unwrap<JSTransferable>(wrapper_val)};
12561261 } else {
1257- Local<Object> wrapper_obj = env->js_transferable_constructor_template ()
1258- ->GetFunction (context)
1259- .ToLocalChecked ()
1260- ->NewInstance (context)
1261- .ToLocalChecked ();
1262+ Local<Function> ctor;
1263+ if (!env->js_transferable_constructor_template ()
1264+ ->GetFunction (context)
1265+ .ToLocal (&ctor)) {
1266+ return {};
1267+ }
1268+ Local<Object> wrapper_obj;
1269+ if (!ctor->NewInstance (context).ToLocal (&wrapper_obj)) {
1270+ return {};
1271+ }
12621272 // Make sure the JSTransferable wrapper object is not garbage collected
12631273 // until the strong BaseObjectPtr's reference count is decreased to 0.
12641274 wrapper = MakeDetachedBaseObject<JSTransferable>(env, wrapper_obj, target);
1265- target
1266- ->SetPrivate (
1267- context, env->js_transferable_wrapper_private_symbol (), wrapper_obj)
1268- .ToChecked ();
1275+ if (target
1276+ ->SetPrivate (context,
1277+ env->js_transferable_wrapper_private_symbol (),
1278+ wrapper_obj)
1279+ .IsNothing ()) {
1280+ return {};
1281+ }
12691282 }
12701283 return wrapper;
12711284}
@@ -1396,7 +1409,9 @@ Maybe<BaseObjectPtrList> JSTransferable::NestedTransferables() const {
13961409 if (!JSTransferable::IsJSTransferable (env (), context, obj)) {
13971410 continue ;
13981411 }
1399- ret.emplace_back (JSTransferable::Wrap (env (), obj));
1412+ auto wrapped = JSTransferable::Wrap (env (), obj);
1413+ if (!wrapped) return Nothing<BaseObjectPtrList>();
1414+ ret.emplace_back (wrapped);
14001415 }
14011416 return Just (ret);
14021417}
0 commit comments