Add runtime check for binary +-* operations for numbers

This commit is contained in:
alldroll 2019-09-19 13:53:10 +01:00 committed by Dave Cunningham
parent fbde25be21
commit f00242da42
8 changed files with 37 additions and 4 deletions

View File

@ -47,7 +47,7 @@ func builtinPlus(i *interpreter, trace traceElement, x, y value) (value, error)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return makeValueNumber(left.value + right.value), nil return makeDoubleCheck(i, trace, left.value+right.value)
case *valueString: case *valueString:
right, err := builtinToString(i, trace, y) right, err := builtinToString(i, trace, y)
if err != nil { if err != nil {
@ -82,7 +82,7 @@ func builtinMinus(i *interpreter, trace traceElement, xv, yv value) (value, erro
if err != nil { if err != nil {
return nil, err return nil, err
} }
return makeValueNumber(x.value - y.value), nil return makeDoubleCheck(i, trace, x.value-y.value)
} }
func builtinMult(i *interpreter, trace traceElement, xv, yv value) (value, error) { func builtinMult(i *interpreter, trace traceElement, xv, yv value) (value, error) {
@ -94,7 +94,7 @@ func builtinMult(i *interpreter, trace traceElement, xv, yv value) (value, error
if err != nil { if err != nil {
return nil, err return nil, err
} }
return makeValueNumber(x.value * y.value), nil return makeDoubleCheck(i, trace, x.value*y.value)
} }
func builtinDiv(i *interpreter, trace traceElement, xv, yv value) (value, error) { func builtinDiv(i *interpreter, trace traceElement, xv, yv value) (value, error) {

View File

@ -886,7 +886,7 @@ func jsonToValue(i *interpreter, trace traceElement, v interface{}) (value, erro
case bool: case bool:
return makeValueBoolean(v), nil return makeValueBoolean(v), nil
case float64: case float64:
return makeValueNumber(v), nil return makeDoubleCheck(i, trace, v)
case map[string]interface{}: case map[string]interface{}:
fieldMap := map[string]value{} fieldMap := map[string]value{}

10
testdata/inf_min_number.golden vendored Normal file
View File

@ -0,0 +1,10 @@
RUNTIME ERROR: Overflow
-------------------------------------------------
testdata/inf_min_number:1:1-15 $
-1e308 - 1e308
-------------------------------------------------
During evaluation

1
testdata/inf_min_number.jsonnet vendored Normal file
View File

@ -0,0 +1 @@
-1e308 - 1e308

10
testdata/inf_mul_number.golden vendored Normal file
View File

@ -0,0 +1,10 @@
RUNTIME ERROR: Overflow
-------------------------------------------------
testdata/inf_mul_number:1:1-19 $
1e300 * 1000000000
-------------------------------------------------
During evaluation

1
testdata/inf_mul_number.jsonnet vendored Normal file
View File

@ -0,0 +1 @@
1e300 * 1000000000

10
testdata/inf_sum_number.golden vendored Normal file
View File

@ -0,0 +1,10 @@
RUNTIME ERROR: Overflow
-------------------------------------------------
testdata/inf_sum_number:1:1-14 $
1e308 + 1e308
-------------------------------------------------
During evaluation

1
testdata/inf_sum_number.jsonnet vendored Normal file
View File

@ -0,0 +1 @@
1e308 + 1e308