diff options
author | Rickard Green <[email protected]> | 2010-11-18 11:45:18 +0100 |
---|---|---|
committer | Rickard Green <[email protected]> | 2010-11-18 11:45:31 +0100 |
commit | ab9932741308ee226173256c1f7a5f6481c33217 (patch) | |
tree | 8cfdb973a2902f4dd573f1b7e70e4423df3d3525 | |
parent | 983a6efa7827161e079da49d720c9e5646d384be (diff) | |
parent | f8201e51a45859708f9eb627936e4d63f04d4fdc (diff) | |
download | otp-ab9932741308ee226173256c1f7a5f6481c33217.tar.gz otp-ab9932741308ee226173256c1f7a5f6481c33217.tar.bz2 otp-ab9932741308ee226173256c1f7a5f6481c33217.zip |
Merge branch 'pg/fix-system_info-cpu_topology-segfault' into dev
* pg/fix-system_info-cpu_topology-segfault:
Fix crash with erlang:system_info({cpu_topology,junk})
OTP-8914
-rw-r--r-- | erts/emulator/beam/erl_bif_info.c | 2 | ||||
-rw-r--r-- | erts/emulator/test/system_info_SUITE.erl | 1 |
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 801263ec26..2f3e23f879 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. |