diff options
author | Björn-Egil Dahlberg <[email protected]> | 2014-02-27 17:50:58 +0100 |
---|---|---|
committer | Björn-Egil Dahlberg <[email protected]> | 2014-02-27 18:39:07 +0100 |
commit | 615e41b3810cecc7a30668193ce1fb0207cc42c7 (patch) | |
tree | 681b4ee32a3a603bca9d0a04c2373f9e542f2850 /erts/emulator/beam/utils.c | |
parent | 2202a8880f5472ce4bf65afdb967c70a12f35703 (diff) | |
download | otp-615e41b3810cecc7a30668193ce1fb0207cc42c7.tar.gz otp-615e41b3810cecc7a30668193ce1fb0207cc42c7.tar.bz2 otp-615e41b3810cecc7a30668193ce1fb0207cc42c7.zip |
erts: Fix Map cmp exact equal of an empty map
The expression,
#{} =:= M
where M was any Map, would always result in 'true'.
This commit fixes this issue by first comparing sizes for
both terms and then checking for size zero.
Diffstat (limited to 'erts/emulator/beam/utils.c')
-rw-r--r-- | erts/emulator/beam/utils.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/erts/emulator/beam/utils.c b/erts/emulator/beam/utils.c index 5b43d25e3c..738f793020 100644 --- a/erts/emulator/beam/utils.c +++ b/erts/emulator/beam/utils.c @@ -2125,7 +2125,11 @@ tailrecur_ne: if (!is_boxed(b) || *boxed_val_rel(b,b_base) != *aa) goto not_equal; bb = map_val_rel(b,b_base); - if ((sz = map_get_size((map_t*)aa)) == 0) goto pop_next; + sz = map_get_size((map_t*)aa); + + if (sz != map_get_size((map_t*)bb)) goto not_equal; + if (sz == 0) goto pop_next; + aa += 2; bb += 2; sz += 1; /* increment for tuple-keys */ |