diff options
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/libbfd.c | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/bfd/libbfd.c b/bfd/libbfd.c index 5126ee2..86366e4 100644 --- a/bfd/libbfd.c +++ b/bfd/libbfd.c @@ -1072,18 +1072,15 @@ static void * bfd_mmap_local (bfd *abfd, size_t rsize, int prot, void **map_addr, size_t *map_size) { - if (!_bfd_constant_p (rsize)) + ufile_ptr filesize = bfd_get_file_size (abfd); + ufile_ptr offset = bfd_tell (abfd); + if (filesize < offset || filesize - offset < rsize) { - ufile_ptr filesize = bfd_get_file_size (abfd); - if (filesize != 0 && rsize > filesize) - { - bfd_set_error (bfd_error_file_truncated); - return NULL; - } + bfd_set_error (bfd_error_file_truncated); + return NULL; } void *mem; - ufile_ptr offset = bfd_tell (abfd); mem = bfd_mmap (abfd, NULL, rsize, prot, MAP_PRIVATE, offset, map_addr, map_size); return mem; |