@@ -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