Skip to content

Commit cf61ee1

Browse files
committed
Add max size for range operator
1 parent d668051 commit cf61ee1

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed

eval.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -238,18 +238,22 @@ func (n binaryNode) eval(env interface{}) (interface{}, error) {
238238
return math.Pow(l, r), nil
239239

240240
case "..":
241-
return makeRange(int64(l), int64(r)), nil
241+
return makeRange(int64(l), int64(r))
242242
}
243243

244244
return nil, fmt.Errorf("implement %q operator", n.operator)
245245
}
246246

247-
func makeRange(min, max int64) []float64 {
248-
a := make([]float64, max-min+1)
247+
func makeRange(min, max int64) ([]float64, error) {
248+
size := max - min + 1
249+
if size > 1e6 {
250+
return nil, fmt.Errorf("range %v..%v exceeded max size of 1e6", min, max)
251+
}
252+
a := make([]float64, size)
249253
for i := range a {
250254
a[i] = float64(min + int64(i))
251255
}
252-
return a
256+
return a, nil
253257
}
254258

255259
func (n propertyNode) eval(env interface{}) (interface{}, error) {

eval_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,11 @@ var evalErrorTests = []evalErrorTest{
271271
map[string]interface{}{"foo": nil},
272272
`reflect: call of reflect.Value.Call on zero Value`,
273273
},
274+
{
275+
"1..1e6+1",
276+
nil,
277+
"range 1..1000001 exceeded max size of 1e6",
278+
},
274279
}
275280

276281
func TestEval(t *testing.T) {

0 commit comments

Comments
 (0)