aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator
diff options
context:
space:
mode:
authorPaul Guyot <[email protected]>2010-10-02 23:02:13 +0200
committerPaul Guyot <[email protected]>2010-10-02 23:02:13 +0200
commitf8201e51a45859708f9eb627936e4d63f04d4fdc (patch)
tree0afab1112babf9040781fefff0349452ecf4abd0 /erts/emulator
parentf21f0fa7d7ab6d5db573f06191a93aed6477b01b (diff)
downloadotp-f8201e51a45859708f9eb627936e4d63f04d4fdc.tar.gz
otp-f8201e51a45859708f9eb627936e4d63f04d4fdc.tar.bz2
otp-f8201e51a45859708f9eb627936e4d63f04d4fdc.zip
Fix crash with erlang:system_info({cpu_topology,junk})
There is a bug in system_info BIF causing a crash if erts_get_cpu_topology_term fails. The fix comes with a non-regression test.
Diffstat (limited to 'erts/emulator')
-rw-r--r--erts/emulator/beam/erl_bif_info.c2
-rw-r--r--erts/emulator/test/system_info_SUITE.erl1
2 files changed, 3 insertions, 0 deletions
diff --git a/erts/emulator/beam/erl_bif_info.c b/erts/emulator/beam/erl_bif_info.c
index 40d8dc097c..a48c76886f 100644
--- a/erts/emulator/beam/erl_bif_info.c
+++ b/erts/emulator/beam/erl_bif_info.c
@@ -1687,6 +1687,8 @@ info_1_tuple(Process* BIF_P, /* Pointer to current process. */
return erts_get_cpu_topology_term(BIF_P, *tp);
} else if (ERTS_IS_ATOM_STR("cpu_topology", sel) && arity == 2) {
Eterm res = erts_get_cpu_topology_term(BIF_P, *tp);
+ if (res == THE_NON_VALUE)
+ goto badarg;
ERTS_BIF_PREP_TRAP1(ret, erts_format_cpu_topology_trap, BIF_P, res);
return ret;
#if defined(PURIFY) || defined(VALGRIND)
diff --git a/erts/emulator/test/system_info_SUITE.erl b/erts/emulator/test/system_info_SUITE.erl
index ba433d4e11..cd940f3ddf 100644
--- a/erts/emulator/test/system_info_SUITE.erl
+++ b/erts/emulator/test/system_info_SUITE.erl
@@ -132,6 +132,7 @@ misc_smoke_tests(Config) when is_list(Config) ->
?line true = is_binary(erlang:system_info(procs)),
?line true = is_binary(erlang:system_info(loaded)),
?line true = is_binary(erlang:system_info(dist)),
+ ?line ok = try erlang:system_info({cpu_topology,erts_get_cpu_topology_error_case}), fail catch error:badarg -> ok end,
?line ok.