mirror of
https://github.com/mikefarah/yq.git
synced 2026-07-06 13:25:42 +00:00
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:
parent
778088d70c
commit
341e2524b9
@ -80,13 +80,24 @@ func sliceArrayOperator(d *dataTreeNavigator, context Context, expressionNode *E
|
|||||||
if relativeFirstNumber < 0 {
|
if relativeFirstNumber < 0 {
|
||||||
relativeFirstNumber = len(lhsNode.Content) + firstNumber
|
relativeFirstNumber = len(lhsNode.Content) + firstNumber
|
||||||
}
|
}
|
||||||
|
if relativeFirstNumber < 0 {
|
||||||
|
relativeFirstNumber = 0
|
||||||
|
} else if relativeFirstNumber > len(lhsNode.Content) {
|
||||||
|
relativeFirstNumber = len(lhsNode.Content)
|
||||||
|
}
|
||||||
|
|
||||||
relativeSecondNumber := secondNumber
|
relativeSecondNumber := secondNumber
|
||||||
if relativeSecondNumber < 0 {
|
if relativeSecondNumber < 0 {
|
||||||
relativeSecondNumber = len(lhsNode.Content) + secondNumber
|
relativeSecondNumber = len(lhsNode.Content) + secondNumber
|
||||||
|
}
|
||||||
|
if relativeSecondNumber < 0 {
|
||||||
|
relativeSecondNumber = 0
|
||||||
} else if relativeSecondNumber > len(lhsNode.Content) {
|
} else if relativeSecondNumber > len(lhsNode.Content) {
|
||||||
relativeSecondNumber = len(lhsNode.Content)
|
relativeSecondNumber = len(lhsNode.Content)
|
||||||
}
|
}
|
||||||
|
if relativeSecondNumber < relativeFirstNumber {
|
||||||
|
relativeSecondNumber = relativeFirstNumber
|
||||||
|
}
|
||||||
|
|
||||||
log.Debugf("calculateIndicesToTraverse: slice from %v to %v", relativeFirstNumber, relativeSecondNumber)
|
log.Debugf("calculateIndicesToTraverse: slice from %v to %v", relativeFirstNumber, relativeSecondNumber)
|
||||||
|
|
||||||
|
|||||||
@ -98,6 +98,22 @@ var sliceArrayScenarios = []expressionScenario{
|
|||||||
"D0, P[], (!!seq)::- cat1\n",
|
"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",
|
description: "Slicing strings",
|
||||||
document: `country: Australia`,
|
document: `country: Australia`,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user