Add max size for range operator

This commit is contained in:
Anton Medvedev
2018-07-17 12:11:16 +03:00
parent 358f262c4d
commit 9d984e9130
2 changed files with 13 additions and 4 deletions
+8 -4
View File
@@ -238,18 +238,22 @@ func (n binaryNode) eval(env interface{}) (interface{}, error) {
return math.Pow(l, r), nil
case "..":
return makeRange(int64(l), int64(r)), nil
return makeRange(int64(l), int64(r))
}
return nil, fmt.Errorf("implement %q operator", n.operator)
}
func makeRange(min, max int64) []float64 {
a := make([]float64, max-min+1)
func makeRange(min, max int64) ([]float64, error) {
size := max - min + 1
if size > 1e6 {
return nil, fmt.Errorf("range %v..%v exceeded max size of 1e6", min, max)
}
a := make([]float64, size)
for i := range a {
a[i] = float64(min + int64(i))
}
return a
return a, nil
}
func (n propertyNode) eval(env interface{}) (interface{}, error) {
+5
View File
@@ -271,6 +271,11 @@ var evalErrorTests = []evalErrorTest{
map[string]interface{}{"foo": nil},
`reflect: call of reflect.Value.Call on zero Value`,
},
{
"1..1e6+1",
nil,
"range 1..1000001 exceeded max size of 1e6",
},
}
func TestEval(t *testing.T) {