diff options
author | Sverker Eriksson <[email protected]> | 2016-02-18 15:59:56 +0100 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2016-02-18 15:59:56 +0100 |
commit | eae8965a58b049cef1562b4462b05d9cab5286c3 (patch) | |
tree | 2efb7416fadd4820d7d8f1a83cf16d3d73d5744f /erts/emulator/beam/erl_nif.c | |
parent | 85d2337de76ba43f087478d4566641d632f06fec (diff) | |
parent | 7a319cd96f7f4869300b32442ebe892ae557f41c (diff) | |
download | otp-eae8965a58b049cef1562b4462b05d9cab5286c3.tar.gz otp-eae8965a58b049cef1562b4462b05d9cab5286c3.tar.bz2 otp-eae8965a58b049cef1562b4462b05d9cab5286c3.zip |
Merge branch 'sverk/fix-list-length-int/OTP-13288'
* sverk/fix-list-length-int/OTP-13288:
erts: Fix error cases in enif_get_list_length
erts: Use Sint instead of int for list lengths
Diffstat (limited to 'erts/emulator/beam/erl_nif.c')
-rw-r--r-- | erts/emulator/beam/erl_nif.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/erts/emulator/beam/erl_nif.c b/erts/emulator/beam/erl_nif.c index 3bc4e62f0f..2204231748 100644 --- a/erts/emulator/beam/erl_nif.c +++ b/erts/emulator/beam/erl_nif.c @@ -911,8 +911,13 @@ int enif_get_list_cell(ErlNifEnv* env, Eterm term, Eterm* head, Eterm* tail) int enif_get_list_length(ErlNifEnv* env, Eterm term, unsigned* len) { - if (is_not_list(term) && is_not_nil(term)) return 0; - *len = erts_list_length(term); + Sint i; + Uint u; + + if ((i = erts_list_length(term)) < 0) return 0; + u = (Uint)i; + if ((unsigned)u != u) return 0; + *len = u; return 1; } |