diff --git a/src/jiffy.erl b/src/jiffy.erl index 08fa3c0..8b9432f 100644 --- a/src/jiffy.erl +++ b/src/jiffy.erl @@ -115,9 +115,17 @@ finish_decode({bignum_e, Value}) -> {E, []} = string:to_integer(ExpStr), {I, E} end, - IVal * math:pow(10, EVal); + try + IVal * math:pow(10, EVal) + catch + error:badarith -> throw({error, {range, EVal}}) + end; finish_decode({bigdbl, Value}) -> - list_to_float(binary_to_list(Value)); + try + list_to_float(binary_to_list(Value)) + catch + error:badarg -> throw({error, {range, Value}}) + end; finish_decode({Pairs}) when is_list(Pairs) -> finish_decode_obj(Pairs, []); finish_decode(Vals) when is_list(Vals) -> diff --git a/test/jiffy_03_number_tests.erl b/test/jiffy_03_number_tests.erl index ac7b95f..f30b52e 100644 --- a/test/jiffy_03_number_tests.erl +++ b/test/jiffy_03_number_tests.erl @@ -97,6 +97,8 @@ cases(error) -> <<"1E">>, <<"1-E2">>, <<"2E +3">>, + <<"1E3000">>, + <<"0.1E30000">>, <<"1EA">> ];