operator-dot.go: fixed the index range checking
This commit is contained in:
parent
d4f63a3837
commit
99e0190b9c
@ -36,6 +36,9 @@ func TestListParser(t *testing.T) {
|
|||||||
/* 14 */ {`[1,2,3].1`, int64(2), nil},
|
/* 14 */ {`[1,2,3].1`, int64(2), nil},
|
||||||
/* 15 */ {`ls=[1,2,3] but ls.1`, int64(2), nil},
|
/* 15 */ {`ls=[1,2,3] but ls.1`, int64(2), nil},
|
||||||
/* 16 */ {`ls=[1,2,3] but ls.(-1)`, int64(3), nil},
|
/* 16 */ {`ls=[1,2,3] but ls.(-1)`, int64(3), nil},
|
||||||
|
/* 17 */ {`list=["one","two","three"]; list.10`, nil, errors.New(`[1:36] index 10 out of bounds`)},
|
||||||
|
/* 18 */ {`["a", "b", "c"]`, newListA("a", "b", "c"), nil},
|
||||||
|
/* 19 */ {`["a", "b", "c"]`, newList([]any{"a", "b", "c"}), nil},
|
||||||
|
|
||||||
// /* 8 */ {`[int(x)|x=csv("test.csv",1,all(),1)]`, []any{int64(10), int64(40), int64(20)}, nil},
|
// /* 8 */ {`[int(x)|x=csv("test.csv",1,all(),1)]`, []any{int64(10), int64(40), int64(20)}, nil},
|
||||||
// /* 9 */ {`sum(@[int(x)|x=csv("test.csv",1,all(),1)])`, []any{int64(10), int64(40), int64(20)}, nil},
|
// /* 9 */ {`sum(@[int(x)|x=csv("test.csv",1,all(),1)])`, []any{int64(10), int64(40), int64(20)}, nil},
|
||||||
|
@ -22,10 +22,11 @@ func verifyIndex(ctx ExprContext, indexTerm *term, maxValue int) (index int, err
|
|||||||
var indexValue any
|
var indexValue any
|
||||||
if indexValue, err = indexTerm.compute(ctx); err == nil {
|
if indexValue, err = indexTerm.compute(ctx); err == nil {
|
||||||
if v, err = indexTerm.toInt(indexValue, "index expression value must be integer"); err == nil {
|
if v, err = indexTerm.toInt(indexValue, "index expression value must be integer"); err == nil {
|
||||||
|
if v < 0 && v >= -maxValue {
|
||||||
|
v = maxValue + v
|
||||||
|
}
|
||||||
if v >= 0 && v < maxValue {
|
if v >= 0 && v < maxValue {
|
||||||
index = v
|
index = v
|
||||||
} else if index >= -maxValue {
|
|
||||||
index = maxValue + v
|
|
||||||
} else {
|
} else {
|
||||||
err = indexTerm.Errorf("index %d out of bounds", v)
|
err = indexTerm.Errorf("index %d out of bounds", v)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user