Skip to content

Commit 44c2465

Browse files
jasnelltargos
authored andcommitted
src: fixup node_messaging error handling
Replace ToLocalChecked uses PR-URL: #59792 Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com> Reviewed-By: Juan José Arboleda <soyjuanarbol@gmail.com>
1 parent 0d1e53d commit 44c2465

File tree

1 file changed

+28
-13
lines changed

1 file changed

+28
-13
lines changed

src/node_messaging.cc

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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(
12451247
BaseObjectPtr<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

Comments
 (0)