Merge pull request #701 from lightbend/fix-stack-overflow-in-resolve-context

Remove unmodifiable collection wrappers in ResolveContext
This commit is contained in:
Havoc Pennington 2020-09-18 08:18:39 -04:00 committed by GitHub
commit 001e6c3b82
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -32,8 +32,12 @@ final class ResolveContext {
this.memos = memos;
this.options = options;
this.restrictToChild = restrictToChild;
this.resolveStack = Collections.unmodifiableList(resolveStack);
this.cycleMarkers = Collections.unmodifiableSet(cycleMarkers);
// we don't defensively copy/wrap these because Collections.unmodifiableList etc.
// nest infinitely in a way that causes stack overflow (they don't check to avoid
// multiple wrappers). But they should be treated as immutable because they end
// up shared between multiple ResolveContext.
this.resolveStack = resolveStack;
this.cycleMarkers = cycleMarkers;
}
private static Set<AbstractConfigValue> newCycleMarkers() {