From cb87d9f1a49986b2eb92ac381444f4cc7c9d8a4f Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Fri, 28 Dec 2018 09:34:28 +1030 Subject: [PATCH] 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. --- bfd/ChangeLog | 7 +++++++ bfd/libbfd.c | 8 ++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 84be63b52fc..8a073f6844e 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +2018-12-28 Alan Modra + + 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 * elf32-i386.c (elf_i386_rtype_to_howto): Remove the unused bfd diff --git a/bfd/libbfd.c b/bfd/libbfd.c index 7c45d52aaf7..305ee22b01c 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; -- 2.30.2