Skip to content

Commit 1b534a7

Browse files
committed
fix: MessagePort::MoveToContext crash
1 parent e518bf4 commit 1b534a7

File tree

2 files changed

+12
-10
lines changed

2 files changed

+12
-10
lines changed

src/api/environment.cc

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -615,12 +615,11 @@ MaybeLocal<Object> GetPerContextExports(Local<Context> context,
615615
if (existing_value->IsObject())
616616
return handle_scope.Escape(existing_value.As<Object>());
617617

618-
Local<String> primordials_string =
619-
FIXED_ONE_BYTE_STRING(isolate, "primordials");
618+
// To initialize the per-context binding exports, a non-nullptr isolate_data
619+
// is needed
620+
CHECK(isolate_data);
620621
Local<Object> exports = Object::New(isolate);
621622
if (context->Global()->SetPrivate(context, key, exports).IsNothing() ||
622-
(isolate_data == nullptr &&
623-
exports->Has(context, primordials_string).FromJust()) ||
624623
InitializePrimordials(context, isolate_data).IsNothing()) {
625624
return MaybeLocal<Object>();
626625
}

src/node_messaging.cc

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -251,14 +251,16 @@ void Message::AdoptSharedValueConveyor(SharedValueConveyor&& conveyor) {
251251

252252
namespace {
253253

254-
MaybeLocal<Function> GetEmitMessageFunction(Local<Context> context) {
254+
MaybeLocal<Function> GetEmitMessageFunction(Local<Context> context,
255+
IsolateData* isolate_data) {
255256
Isolate* isolate = context->GetIsolate();
256257
Local<Object> per_context_bindings;
257258
Local<Value> emit_message_val;
258-
if (!GetPerContextExports(context).ToLocal(&per_context_bindings) ||
259-
!per_context_bindings->Get(context,
260-
FIXED_ONE_BYTE_STRING(isolate, "emitMessage"))
261-
.ToLocal(&emit_message_val)) {
259+
if (!GetPerContextExports(context, isolate_data)
260+
.ToLocal(&per_context_bindings) ||
261+
!per_context_bindings
262+
->Get(context, FIXED_ONE_BYTE_STRING(isolate, "emitMessage"))
263+
.ToLocal(&emit_message_val)) {
262264
return MaybeLocal<Function>();
263265
}
264266
CHECK(emit_message_val->IsFunction());
@@ -682,7 +684,8 @@ MessagePort::MessagePort(Environment* env,
682684
}
683685

684686
Local<Function> emit_message_fn;
685-
if (!GetEmitMessageFunction(context).ToLocal(&emit_message_fn))
687+
if (!GetEmitMessageFunction(context, env->isolate_data())
688+
.ToLocal(&emit_message_fn))
686689
return;
687690
emit_message_fn_.Reset(env->isolate(), emit_message_fn);
688691

0 commit comments

Comments
 (0)