summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjörn Gustavsson <bjorn@erlang.org>2021-09-03 10:38:39 +0200
committerBjörn Gustavsson <bjorn@erlang.org>2021-09-06 07:11:13 +0200
commit2859601cca7a9c1c156e64b8e538849e22c38125 (patch)
tree55b748cd1d5cc14e58d5e302a5a0b26e3fa41931
parent6d5a5f31c36bbdaad21585d25974177bd1b75e66 (diff)
downloaderlang-2859601cca7a9c1c156e64b8e538849e22c38125.tar.gz
Protect binary_to_term/1 against bad binaries on 32-bit systems
-rw-r--r--erts/emulator/beam/external.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/erts/emulator/beam/external.c b/erts/emulator/beam/external.c
index c8d0bf7f40..776d42d6d2 100644
--- a/erts/emulator/beam/external.c
+++ b/erts/emulator/beam/external.c
@@ -4846,6 +4846,13 @@ init_done:
if (n <= MAP_SMALL_MAP_LIMIT) {
heap_size += 3 + n + 1 + n;
} else {
+#if !defined(ARCH_64)
+ if ((n >> 30) != 0) {
+ /* Can't possibly fit in memory. */
+ goto error;
+ }
+#endif
+ CHKSIZE(2*n); /* Conservative size check */
heap_size += HASHMAP_ESTIMATED_HEAP_SIZE(n);
}
break;