PR23966, mingw failure due to 32-bit long
authorAlan Modra <amodra@gmail.com>
Thu, 27 Dec 2018 23:04:28 +0000 (09:34 +1030)
committerAlan Modra <amodra@gmail.com>
Fri, 28 Dec 2018 04:32:04 +0000 (15:02 +1030)
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.

bfd/ChangeLog
bfd/libbfd.c

index 84be63b52fc2bc4d355298ebfa59f7713b94905a..8a073f6844e3cb61a3e0c762c88adbb3774ff575 100644 (file)
@@ -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
index 7c45d52aaf7d31476dadcf0bd68baa8010c3da19..305ee22b01cf15f8bbab256fd2d04b26fd5b9367 100644 (file)
@@ -254,6 +254,10 @@ _bfd_dummy_target (bfd *ignore_abfd ATTRIBUTE_UNUSED)
 \f
 /* 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;