From 65c7116bb38013c3d829f21b00bf094606e46731 Mon Sep 17 00:00:00 2001 From: Sverker Eriksson Date: Thu, 19 Mar 2015 15:40:29 +0100 Subject: erts: Fix bug in binary_to_term with more than one big map --- erts/emulator/beam/external.c | 2 +- erts/emulator/test/map_SUITE.erl | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) (limited to 'erts/emulator') diff --git a/erts/emulator/beam/external.c b/erts/emulator/beam/external.c index 9a5ef56c47..458ebd8aa0 100644 --- a/erts/emulator/beam/external.c +++ b/erts/emulator/beam/external.c @@ -3899,7 +3899,6 @@ dec_term_atom_common: /* Iterate through all the hamts and build tree nodes. */ if (hamt_list) { - struct dec_term_hamt_placeholder* hamt = hamt_list; ErtsHeapFactory factory; factory.p = NULL; @@ -3907,6 +3906,7 @@ dec_term_atom_common: /* We assume heap will suffice (see hashmap_over_estimated_heap_size) */ do { + struct dec_term_hamt_placeholder* hamt = hamt_list; *hamt->objp = erts_hashmap_from_array(&factory, hamt->leafs, hamt->size, diff --git a/erts/emulator/test/map_SUITE.erl b/erts/emulator/test/map_SUITE.erl index c421886431..91a5706320 100644 --- a/erts/emulator/test/map_SUITE.erl +++ b/erts/emulator/test/map_SUITE.erl @@ -1147,6 +1147,13 @@ t_map_encode_decode(Config) when is_list(Config) -> 97,55 % 55 :: integer() >>), + %% many maps in same binary + MapList = lists:foldl(fun(K, [M|_]=Acc) -> [M#{K => K} | Acc] end, + [#{}], + lists:seq(1,100)), + MapList = binary_to_term(term_to_binary(MapList)), + MapListR = lists:reverse(MapList), + MapListR = binary_to_term(term_to_binary(MapListR)), %% error cases %% template: <<131,116,0,0,0,2,100,0,1,97,100,0,1,98,97,1,97,1>> -- cgit v1.2.3