aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2018-12-28 09:34:28 +1030
committerAlan Modra <amodra@gmail.com>2018-12-28 15:02:04 +1030
commitcb87d9f1a49986b2eb92ac381444f4cc7c9d8a4f (patch)
tree0e671a28f4d850fa598ad2920be0efe1aff0eb8b
parentd1a3c973fa1c0d7eead585e82e02db11daeb36cf (diff)
downloadbinutils-cb87d9f1a49986b2eb92ac381444f4cc7c9d8a4f.zip
binutils-cb87d9f1a49986b2eb92ac381444f4cc7c9d8a4f.tar.gz
binutils-cb87d9f1a49986b2eb92ac381444f4cc7c9d8a4f.tar.bz2
PR23966, mingw failure due to 32-bit long
PR 23966 * libbfd.c (SSIZE_MAX): Define. (bfd_malloc, bfd_realloc): Don't cast size to long to check for "negative" values, compare against SSIZE_MAX instead.
-rw-r--r--bfd/ChangeLog7
-rw-r--r--bfd/libbfd.c8
2 files changed, 13 insertions, 2 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 84be63b..8a073f6 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,10 @@
+2018-12-28 Alan Modra <amodra@gmail.com>
+
+ PR 23966
+ * libbfd.c (SSIZE_MAX): Define.
+ (bfd_malloc, bfd_realloc): Don't cast size to long to check for
+ "negative" values, compare against SSIZE_MAX instead.
+
2018-12-23 H.J. Lu <hongjiu.lu@intel.com>
* elf32-i386.c (elf_i386_rtype_to_howto): Remove the unused bfd
diff --git a/bfd/libbfd.c b/bfd/libbfd.c
index 7c45d52..305ee22 100644
--- a/bfd/libbfd.c
+++ b/bfd/libbfd.c
@@ -254,6 +254,10 @@ _bfd_dummy_target (bfd *ignore_abfd ATTRIBUTE_UNUSED)
/* Allocate memory using malloc. */
+#ifndef SSIZE_MAX
+#define SSIZE_MAX ((size_t) -1 >> 1)
+#endif
+
void *
bfd_malloc (bfd_size_type size)
{
@@ -262,7 +266,7 @@ bfd_malloc (bfd_size_type size)
if (size != sz
/* This is to pacify memory checkers like valgrind. */
- || ((signed long) sz) < 0)
+ || sz > SSIZE_MAX)
{
bfd_set_error (bfd_error_no_memory);
return NULL;
@@ -304,7 +308,7 @@ bfd_realloc (void *ptr, bfd_size_type size)
if (size != sz
/* This is to pacify memory checkers like valgrind. */
- || ((signed long) sz) < 0)
+ || sz > SSIZE_MAX)
{
bfd_set_error (bfd_error_no_memory);
return NULL;