diff --git a/config/src/main/java/com/typesafe/config/impl/ResolveContext.java b/config/src/main/java/com/typesafe/config/impl/ResolveContext.java index cf669912f..bb59af94a 100644 --- a/config/src/main/java/com/typesafe/config/impl/ResolveContext.java +++ b/config/src/main/java/com/typesafe/config/impl/ResolveContext.java @@ -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 newCycleMarkers() {