src: fixup node_messaging error handling · nodejs/node@44c2465
@@ -328,6 +328,7 @@ class SerializerDelegate : public ValueSerializer::Delegate {
328328if (JSTransferable::IsJSTransferable(env_, context_, object)) {
329329 BaseObjectPtr<JSTransferable> js_transferable =
330330JSTransferable::Wrap(env_, object);
331+if (!js_transferable) return Nothing<bool>();
331332return WriteHostObject(js_transferable);
332333 }
333334@@ -550,6 +551,7 @@ Maybe<bool> Message::Serialize(Environment* env,
550551return Nothing<bool>();
551552 }
552553 host_object = JSTransferable::Wrap(env, entry);
554+if (!host_object) return Nothing<bool>();
553555 }
554556555557if (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+ }
12511256DCHECK(wrapper_val->IsObject() || wrapper_val->IsUndefined());
12521257 BaseObjectPtr<JSTransferable> wrapper;
12531258if (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 }
12701283return wrapper;
12711284}
@@ -1396,7 +1409,9 @@ Maybe<BaseObjectPtrList> JSTransferable::NestedTransferables() const {
13961409if (!JSTransferable::IsJSTransferable(env(), context, obj)) {
13971410continue;
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 }
14011416return Just(ret);
14021417}