Skip to content

Commit 8b2098f

Browse files
authored
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 4006d5e commit 8b2098f

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

src/api/environment.cc

+8-3
Original file line numberDiff line numberDiff line change
@@ -758,7 +758,7 @@ Maybe<void> InitializeMainContextForSnapshot(Local<Context> context) {
758758
if (InitializeBaseContextForSnapshot(context).IsNothing()) {
759759
return Nothing<void>();
760760
}
761-
return InitializePrimordials(context);
761+
return JustVoid();
762762
}
763763

764764
Maybe<void> InitializePrimordials(Local<Context> context) {
@@ -767,13 +767,18 @@ Maybe<void> InitializePrimordials(Local<Context> context) {
767767
Context::Scope context_scope(context);
768768
Local<Object> exports;
769769

770+
if (!GetPerContextExports(context).ToLocal(&exports)) {
771+
return Nothing<void>();
772+
}
770773
Local<String> primordials_string =
771774
FIXED_ONE_BYTE_STRING(isolate, "primordials");
775+
// Ensure that `InitializePrimordials` is called exactly once on a given
776+
// context.
777+
CHECK(!exports->Has(context, primordials_string).FromJust());
772778

773-
// Create primordials first and make it available to per-context scripts.
774779
Local<Object> primordials = Object::New(isolate);
780+
// Create primordials and make it available to per-context scripts.
775781
if (primordials->SetPrototypeV2(context, Null(isolate)).IsNothing() ||
776-
!GetPerContextExports(context).ToLocal(&exports) ||
777782
exports->Set(context, primordials_string, primordials).IsNothing()) {
778783
return Nothing<void>();
779784
}

0 commit comments

Comments
 (0)