From 55daf6d93c1627388e8903f5dcdddd07e37013c9 Mon Sep 17 00:00:00 2001 From: Mike Farah Date: Wed, 16 Jul 2025 15:35:12 +1000 Subject: [PATCH] Fixed panic for syntax error when creating a map #2423 --- pkg/yqlib/operator_collect_object.go | 4 ++++ pkg/yqlib/operator_collect_object_test.go | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/pkg/yqlib/operator_collect_object.go b/pkg/yqlib/operator_collect_object.go index 6d44f7b2..2e96b6f1 100644 --- a/pkg/yqlib/operator_collect_object.go +++ b/pkg/yqlib/operator_collect_object.go @@ -2,6 +2,7 @@ package yqlib import ( "container/list" + "fmt" ) /* @@ -34,6 +35,9 @@ func collectObjectOperator(d *dataTreeNavigator, originalContext Context, _ *Exp for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { candidateNode := el.Value.(*CandidateNode) + if len(candidateNode.Content) < len(first.Content) { + return Context{}, fmt.Errorf("CollectObject: mismatching node sizes; are you creating a map with mismatching key value pairs?") + } for i := 0; i < len(first.Content); i++ { log.Debugf("rotate[%v] = %v", i, NodeToString(candidateNode.Content[i])) diff --git a/pkg/yqlib/operator_collect_object_test.go b/pkg/yqlib/operator_collect_object_test.go index 431839e8..8fc09fac 100644 --- a/pkg/yqlib/operator_collect_object_test.go +++ b/pkg/yqlib/operator_collect_object_test.go @@ -12,6 +12,11 @@ var collectObjectOperatorScenarios = []expressionScenario{ "D0, P[name], (!!str)::mike\n", }, }, + { + skipDoc: true, + expression: `{"c": "a", "b", "d"}`, + expectedError: "CollectObject: mismatching node sizes; are you creating a map with mismatching key value pairs?", + }, { skipDoc: true, expression: `{"person": {"names": ["mike"]}} | .person.names[0]`,