Skip to content

Commit c8c1c2c

Browse files
committed
src: ensure primordials are initialized exactly once
1 parent 38390e5 commit c8c1c2c

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

src/api/environment.cc

Lines changed: 7 additions & 3 deletions
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,17 @@ 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 context.
776+
CHECK(!exports->Has(context, primordials_string).FromJust());
772777

773-
// Create primordials first and make it available to per-context scripts.
774778
Local<Object> primordials = Object::New(isolate);
779+
// Create primordials and make it available to per-context scripts.
775780
if (primordials->SetPrototypeV2(context, Null(isolate)).IsNothing() ||
776-
!GetPerContextExports(context).ToLocal(&exports) ||
777781
exports->Set(context, primordials_string, primordials).IsNothing()) {
778782
return Nothing<void>();
779783
}

0 commit comments

Comments
 (0)