Mirror of https://github.com/cue-lang/cue cuelang.org
cue go

internal/core/dep,internal/core/export: fix stack overflow on recursive definitions master

Break two independent infinite recursion cycles triggered by `cue def -e '#a'` on input with recursive pattern constraints like `#c: [string]: #c`. In dep.go, track vertices already visited by markInternalResolvers to prevent the cycle markInternalResolvers → markConjuncts → markExpr → markResolver → reportDependency → markInternalResolvers. In the exporter, track vertices currently being inlined by refExpr to prevent the cycle refExpr → expr → mergeValues → addExpr → adt → resolve → refExpr. Fixes #3476. Signed-off-by: Daniel Martí <mvdan@mvdan.cc> Change-Id: Ib2139fc6555bdde6f2216118668d992adfe6babd Reviewed-on: https://cue.gerrithub.io/c/cue-lang/cue/+/1231449 Reviewed-by: Marcel van Lohuizen <mpvl@gmail.com> Unity-Result: CUE porcuepine <cue.porcuepine@gmail.com> TryBot-Result: CUEcueckoo <cueckoo@cuelang.org>


+54 -8
3 changed files