summaryrefslogtreecommitdiff
path: root/erts/emulator/test/list_bif_SUITE.erl
diff options
context:
space:
mode:
authorBjörn Gustavsson <bjorn@erlang.org>2022-05-29 10:34:39 +0200
committerBjörn Gustavsson <bjorn@erlang.org>2023-02-22 09:11:15 +0100
commit47ef6142984c312ee6b39257dc40f5dab00534eb (patch)
tree76de641fc96a461230ba99428436b152881cbe29 /erts/emulator/test/list_bif_SUITE.erl
parent73cb4d4305c21621adc84b02902ee5756a07198c (diff)
downloaderlang-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.erl11
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.