Fix array slice out-of-bounds panic with very negative indices

Agent-Logs-Url: https://github.com/mikefarah/yq/sessions/7c146762-d251-45fd-8555-2488f59fc57b

Co-authored-by: mikefarah <1151925+mikefarah@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot] 2026-03-28 03:20:37 +00:00 committed by GitHub
parent 778088d70c
commit 341e2524b9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 27 additions and 0 deletions

View File

@ -80,13 +80,24 @@ func sliceArrayOperator(d *dataTreeNavigator, context Context, expressionNode *E
if relativeFirstNumber < 0 {
relativeFirstNumber = len(lhsNode.Content) + firstNumber
}
if relativeFirstNumber < 0 {
relativeFirstNumber = 0
} else if relativeFirstNumber > len(lhsNode.Content) {
relativeFirstNumber = len(lhsNode.Content)
}
relativeSecondNumber := secondNumber
if relativeSecondNumber < 0 {
relativeSecondNumber = len(lhsNode.Content) + secondNumber
}
if relativeSecondNumber < 0 {
relativeSecondNumber = 0
} else if relativeSecondNumber > len(lhsNode.Content) {
relativeSecondNumber = len(lhsNode.Content)
}
if relativeSecondNumber < relativeFirstNumber {
relativeSecondNumber = relativeFirstNumber
}
log.Debugf("calculateIndicesToTraverse: slice from %v to %v", relativeFirstNumber, relativeSecondNumber)

View File

@ -98,6 +98,22 @@ var sliceArrayScenarios = []expressionScenario{
"D0, P[], (!!seq)::- cat1\n",
},
},
{
skipDoc: true,
document: `[cat, dog, frog]`,
expression: `.[-100:]`,
expected: []string{
"D0, P[], (!!seq)::- cat\n- dog\n- frog\n",
},
},
{
skipDoc: true,
document: `[cat, dog, frog]`,
expression: `.[:-100]`,
expected: []string{
"D0, P[], (!!seq)::[]\n",
},
},
{
description: "Slicing strings",
document: `country: Australia`,