diff options
author | Björn Gustavsson <bjorn@erlang.org> | 2021-09-03 10:38:39 +0200 |
---|---|---|
committer | Björn Gustavsson <bjorn@erlang.org> | 2021-09-06 07:11:13 +0200 |
commit | 2859601cca7a9c1c156e64b8e538849e22c38125 (patch) | |
tree | 55b748cd1d5cc14e58d5e302a5a0b26e3fa41931 | |
parent | 6d5a5f31c36bbdaad21585d25974177bd1b75e66 (diff) | |
download | erlang-2859601cca7a9c1c156e64b8e538849e22c38125.tar.gz |
Protect binary_to_term/1 against bad binaries on 32-bit systems
-rw-r--r-- | erts/emulator/beam/external.c | 7 |
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; |