diff options
author | Sverker Eriksson <[email protected]> | 2015-09-01 19:53:40 +0200 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2015-09-01 20:01:30 +0200 |
commit | a22b5ba19193e3f39129fadd20d375f6cc3f8529 (patch) | |
tree | 98c67cd1faf69ddf19e1c3f76f536b09aebb553a /erts/emulator/beam/erl_printf_term.c | |
parent | 99d3e9c5b2569169d2f5fefd67898d2533e5a83d (diff) | |
download | otp-a22b5ba19193e3f39129fadd20d375f6cc3f8529.tar.gz otp-a22b5ba19193e3f39129fadd20d375f6cc3f8529.tar.bz2 otp-a22b5ba19193e3f39129fadd20d375f6cc3f8529.zip |
erts: Fix bug when tracing with 'process_dump'
If the process stack contained a match state
the print function would crash the vm as it was not
recognized by tag_val_def().
Add new MATCHSTATE_DEF returned by tag_val_def().
All other callers either ignore it or has a default
clause to handle invalid terms.
Diffstat (limited to 'erts/emulator/beam/erl_printf_term.c')
-rw-r--r-- | erts/emulator/beam/erl_printf_term.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/erts/emulator/beam/erl_printf_term.c b/erts/emulator/beam/erl_printf_term.c index d18760dc43..ba9a174fdf 100644 --- a/erts/emulator/beam/erl_printf_term.c +++ b/erts/emulator/beam/erl_printf_term.c @@ -441,11 +441,7 @@ print_term(fmtfn_t fn, void* arg, Eterm obj, long *dcount, PRINT_DOUBLE(res, fn, arg, 'e', 6, 0, ff.fd); } break; - case BINARY_DEF: - if (header_is_bin_matchstate(*boxed_val(wobj))) { - PRINT_STRING(res, fn, arg, "#MatchState"); - } - else { + case BINARY_DEF: { ProcBin* pb = (ProcBin *) binary_val(wobj); if (pb->size == 1) PRINT_STRING(res, fn, arg, "<<1 byte>>"); @@ -519,6 +515,9 @@ print_term(fmtfn_t fn, void* arg, Eterm obj, long *dcount, } } break; + case MATCHSTATE_DEF: + PRINT_STRING(res, fn, arg, "#MatchState"); + break; default: PRINT_STRING(res, fn, arg, "<unknown:"); PRINT_POINTER(res, fn, arg, wobj); |