From 722c9aa16c9631940a08c69f880cf947582515ab Mon Sep 17 00:00:00 2001 From: Rayan Salhab Date: Thu, 14 May 2026 12:33:50 +0300 Subject: [PATCH] Fix nested inline YAML merge explode (#2699) Co-authored-by: cyphercodes --- pkg/yqlib/operator_anchors_aliases.go | 11 +++++------ pkg/yqlib/operator_anchors_aliases_test.go | 9 +++++++++ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/pkg/yqlib/operator_anchors_aliases.go b/pkg/yqlib/operator_anchors_aliases.go index 788469f8..ddff9f73 100644 --- a/pkg/yqlib/operator_anchors_aliases.go +++ b/pkg/yqlib/operator_anchors_aliases.go @@ -170,6 +170,10 @@ func fixedReconstructAliasedMap(node *CandidateNode) error { if mergeNodeSeq.Kind == AliasNode { mergeNodeSeq = mergeNodeSeq.Alias } + mergeNodeSeq = mergeNodeSeq.Copy() + if err := explodeNode(mergeNodeSeq, Context{}); err != nil { + return err + } if mergeNodeSeq.Kind != MappingNode { return fmt.Errorf("can only use merge anchors with maps (!!map) or sequences (!!seq) of maps, but got sequence containing %v", mergeNodeSeq.Tag) } @@ -179,12 +183,7 @@ func fixedReconstructAliasedMap(node *CandidateNode) error { }) for _, item := range itemsToAdd { - // copy to ensure exploding doesn't modify the original node - itemCopy := item.Copy() - if err := explodeNode(itemCopy, Context{}); err != nil { - return err - } - newContent = append(newContent, itemCopy) + newContent = append(newContent, item.Copy()) } } } diff --git a/pkg/yqlib/operator_anchors_aliases_test.go b/pkg/yqlib/operator_anchors_aliases_test.go index 56eb4bdf..bd6bbaa7 100644 --- a/pkg/yqlib/operator_anchors_aliases_test.go +++ b/pkg/yqlib/operator_anchors_aliases_test.go @@ -198,6 +198,15 @@ var fixedAnchorOperatorScenarios = []expressionScenario{ "D0, P[], (!!map)::{a: 42}\n", }, }, + { + skipDoc: true, + description: "Nested merge anchor with inline map", + document: `{<<: {<<: {a: 42}}}`, + expression: `explode(.)`, + expected: []string{ + "D0, P[], (!!map)::{a: 42}\n", + }, + }, { skipDoc: true, description: "Merge anchor with sequence with inline map",