diff options
author | Björn Gustavsson <[email protected]> | 2011-03-09 10:42:58 +0100 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2011-03-09 14:01:03 +0100 |
commit | 1aa1166460dc22791ab909bb0a8565b2e12a1820 (patch) | |
tree | e87a13f69aa6b7a335b77e66e357d7662a60b305 /erts/emulator/beam/global.h | |
parent | c668eba73f72e8407158592bc65f37d5cc8aaaa3 (diff) | |
download | otp-1aa1166460dc22791ab909bb0a8565b2e12a1820.tar.gz otp-1aa1166460dc22791ab909bb0a8565b2e12a1820.tar.bz2 otp-1aa1166460dc22791ab909bb0a8565b2e12a1820.zip |
Fix 18 exabyte memory allocation failure
The new_binary() function takes a size argument that is an
int. In the 64-bit emulator (sizeof(int) == 4, sizeof(Uint) == 8),
any sizes >= 0x8000000 become 0xffffffff80000000 and above and
triggers a memory allocation failure.
Change the type of the size argument to Uint, and change any
callers that cast the argument to an int.
Correction-by: Jon Meredith
Diffstat (limited to 'erts/emulator/beam/global.h')
-rw-r--r-- | erts/emulator/beam/global.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/erts/emulator/beam/global.h b/erts/emulator/beam/global.h index bd540eaaa6..a94ddf25be 100644 --- a/erts/emulator/beam/global.h +++ b/erts/emulator/beam/global.h @@ -834,7 +834,7 @@ do { \ void erts_emasculate_writable_binary(ProcBin* pb); Eterm erts_new_heap_binary(Process *p, byte *buf, int len, byte** datap); Eterm erts_new_mso_binary(Process*, byte*, int); -Eterm new_binary(Process*, byte*, int); +Eterm new_binary(Process*, byte*, Uint); Eterm erts_realloc_binary(Eterm bin, size_t size); /* erl_bif_info.c */ |