From f00242da42b3365f5e3e2e8b50b5b2b31041a1fd Mon Sep 17 00:00:00 2001 From: alldroll Date: Thu, 19 Sep 2019 13:53:10 +0100 Subject: [PATCH] Add runtime check for binary +-* operations for numbers --- builtins.go | 6 +++--- interpreter.go | 2 +- testdata/inf_min_number.golden | 10 ++++++++++ testdata/inf_min_number.jsonnet | 1 + testdata/inf_mul_number.golden | 10 ++++++++++ testdata/inf_mul_number.jsonnet | 1 + testdata/inf_sum_number.golden | 10 ++++++++++ testdata/inf_sum_number.jsonnet | 1 + 8 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 testdata/inf_min_number.golden create mode 100644 testdata/inf_min_number.jsonnet create mode 100644 testdata/inf_mul_number.golden create mode 100644 testdata/inf_mul_number.jsonnet create mode 100644 testdata/inf_sum_number.golden create mode 100644 testdata/inf_sum_number.jsonnet diff --git a/builtins.go b/builtins.go index 0bc165d..1aad57e 100644 --- a/builtins.go +++ b/builtins.go @@ -47,7 +47,7 @@ func builtinPlus(i *interpreter, trace traceElement, x, y value) (value, error) if err != nil { return nil, err } - return makeValueNumber(left.value + right.value), nil + return makeDoubleCheck(i, trace, left.value+right.value) case *valueString: right, err := builtinToString(i, trace, y) if err != nil { @@ -82,7 +82,7 @@ func builtinMinus(i *interpreter, trace traceElement, xv, yv value) (value, erro if err != nil { 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) { @@ -94,7 +94,7 @@ func builtinMult(i *interpreter, trace traceElement, xv, yv value) (value, error if err != nil { 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) { diff --git a/interpreter.go b/interpreter.go index 1f6c35a..84019bc 100644 --- a/interpreter.go +++ b/interpreter.go @@ -886,7 +886,7 @@ func jsonToValue(i *interpreter, trace traceElement, v interface{}) (value, erro case bool: return makeValueBoolean(v), nil case float64: - return makeValueNumber(v), nil + return makeDoubleCheck(i, trace, v) case map[string]interface{}: fieldMap := map[string]value{} diff --git a/testdata/inf_min_number.golden b/testdata/inf_min_number.golden new file mode 100644 index 0000000..226bd40 --- /dev/null +++ b/testdata/inf_min_number.golden @@ -0,0 +1,10 @@ +RUNTIME ERROR: Overflow +------------------------------------------------- + testdata/inf_min_number:1:1-15 $ + +-1e308 - 1e308 + +------------------------------------------------- + During evaluation + + diff --git a/testdata/inf_min_number.jsonnet b/testdata/inf_min_number.jsonnet new file mode 100644 index 0000000..d5b6cbe --- /dev/null +++ b/testdata/inf_min_number.jsonnet @@ -0,0 +1 @@ +-1e308 - 1e308 diff --git a/testdata/inf_mul_number.golden b/testdata/inf_mul_number.golden new file mode 100644 index 0000000..eef6362 --- /dev/null +++ b/testdata/inf_mul_number.golden @@ -0,0 +1,10 @@ +RUNTIME ERROR: Overflow +------------------------------------------------- + testdata/inf_mul_number:1:1-19 $ + +1e300 * 1000000000 + +------------------------------------------------- + During evaluation + + diff --git a/testdata/inf_mul_number.jsonnet b/testdata/inf_mul_number.jsonnet new file mode 100644 index 0000000..a4bc05c --- /dev/null +++ b/testdata/inf_mul_number.jsonnet @@ -0,0 +1 @@ +1e300 * 1000000000 \ No newline at end of file diff --git a/testdata/inf_sum_number.golden b/testdata/inf_sum_number.golden new file mode 100644 index 0000000..e9a1639 --- /dev/null +++ b/testdata/inf_sum_number.golden @@ -0,0 +1,10 @@ +RUNTIME ERROR: Overflow +------------------------------------------------- + testdata/inf_sum_number:1:1-14 $ + +1e308 + 1e308 + +------------------------------------------------- + During evaluation + + diff --git a/testdata/inf_sum_number.jsonnet b/testdata/inf_sum_number.jsonnet new file mode 100644 index 0000000..9d37bc0 --- /dev/null +++ b/testdata/inf_sum_number.jsonnet @@ -0,0 +1 @@ +1e308 + 1e308