Skip to content

Commit 277c70a

Browse files
legendecasjazelly
authored andcommitted
src: ensure primordials are initialized exactly once
PR-URL: #57519 Reviewed-By: Antoine du Hamel <[email protected]> Reviewed-By: James M Snell <[email protected]>
1 parent 4a206e2 commit 277c70a

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

src/api/environment.cc

+8-4
Original file line numberDiff line numberDiff line change
@@ -761,7 +761,7 @@ Maybe<void> InitializeMainContextForSnapshot(Local<Context> context) {
761761
if (InitializeBaseContextForSnapshot(context).IsNothing()) {
762762
return Nothing<void>();
763763
}
764-
return InitializePrimordials(context);
764+
return JustVoid();
765765
}
766766

767767
Maybe<void> InitializePrimordials(Local<Context> context) {
@@ -770,13 +770,17 @@ Maybe<void> InitializePrimordials(Local<Context> context) {
770770
Context::Scope context_scope(context);
771771
Local<Object> exports;
772772

773+
if (!GetPerContextExports(context).ToLocal(&exports)) {
774+
return Nothing<void>();
775+
}
773776
Local<String> primordials_string =
774777
FIXED_ONE_BYTE_STRING(isolate, "primordials");
778+
// Ensure that `InitializePrimordials` is called exactly once on a given
779+
// context.
780+
CHECK(!exports->Has(context, primordials_string).FromJust());
775781

776-
// Create primordials first and make it available to per-context scripts.
777782
Local<Object> primordials = Object::New(isolate);
778-
if (primordials->SetPrototype(context, Null(isolate)).IsNothing() ||
779-
!GetPerContextExports(context).ToLocal(&exports) ||
783+
if (primordials->SetPrototype(context, Null(isolate)).IsNothing() ||
780784
exports->Set(context, primordials_string, primordials).IsNothing()) {
781785
return Nothing<void>();
782786
}

0 commit comments

Comments
 (0)