diff options
author | Björn Gustavsson <bjorn@erlang.org> | 2022-05-29 10:34:39 +0200 |
---|---|---|
committer | Björn Gustavsson <bjorn@erlang.org> | 2023-02-22 09:11:15 +0100 |
commit | 47ef6142984c312ee6b39257dc40f5dab00534eb (patch) | |
tree | 76de641fc96a461230ba99428436b152881cbe29 /erts/emulator/test/list_bif_SUITE.erl | |
parent | 73cb4d4305c21621adc84b02902ee5756a07198c (diff) | |
download | erlang-47ef6142984c312ee6b39257dc40f5dab00534eb.tar.gz |
lists_to_integer() & friends: Don't crash for overlong lists
Let `list_to_integer/1` and `list_to_integer/2` raise a `system_limit`
exception when the result doesn't fit in a bignum. Let
`string:to_integer/1` return `{error,system_limit}` when the result
doesn't fit.
Diffstat (limited to 'erts/emulator/test/list_bif_SUITE.erl')
-rw-r--r-- | erts/emulator/test/list_bif_SUITE.erl | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/erts/emulator/test/list_bif_SUITE.erl b/erts/emulator/test/list_bif_SUITE.erl index b6941bfa43..2e43e9ad5a 100644 --- a/erts/emulator/test/list_bif_SUITE.erl +++ b/erts/emulator/test/list_bif_SUITE.erl @@ -50,14 +50,21 @@ t_list_to_integer(Config) when is_list(Config) -> 12373 = (catch list_to_integer("12373")), -12373 = (catch list_to_integer("-12373")), 12373 = (catch list_to_integer("+12373")), - {'EXIT',{badarg,_}} = ( catch list_to_integer(abc)), + {'EXIT',{badarg,_}} = (catch list_to_integer(abc)), {'EXIT',{badarg,_}} = (catch list_to_integer("")), {12373281903728109372810937209817320981321,"ABC"} = string:to_integer("12373281903728109372810937209817320981321ABC"), {-12373281903728109372810937209817320981321,"ABC"} = string:to_integer("-12373281903728109372810937209817320981321ABC"), {12,[345]} = string:to_integer([$1,$2,345]), - {error, badarg} = string:to_integer([$1,$2,a]), + {error,badarg} = string:to_integer([$1,$2,a]), {error,no_integer} = string:to_integer([$A]), {error,badarg} = string:to_integer($A), + + %% System limit. + Digits = lists:duplicate(11_000_000, $9), + {'EXIT',{system_limit,_}} = catch list_to_integer(Digits), + {'EXIT',{system_limit,_}} = catch list_to_integer(Digits, 16), + {error,system_limit} = string:to_integer(Digits), + ok. %% Test hd/1 with correct and incorrect arguments. |