From 79b5fa5aa2cc44209a42482210a854a3801c8c14 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Tue, 9 Nov 1999 19:13:21 +0000 Subject: [PATCH] * libbfd.c (bfd_read): Check result of read against desired result using !=, not <. (_bfd_generic_get_section_contents): Set bfd_error if the seek is invalid compared to the section size. --- bfd/ChangeLog | 10 ++++++++++ bfd/libbfd.c | 23 +++++++++++++++-------- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index a5a918e3c6..a138c4712d 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,13 @@ +1999-11-09 Ian Lance Taylor + + * libbfd.c (bfd_read): Check result of read against desired result + using !=, not <. + (_bfd_generic_get_section_contents): Set bfd_error if the seek is + invalid compared to the section size. + + * ieee.c (ieee_slurp_debug): Get the length of the debug + information right if there is no data part. + Tue Nov 2 01:44:41 1999 Jeffrey A Law (law@cygnus.com) * som.c (som_fixup_formats): Improve handling of R_AUX_UNWIND, diff --git a/bfd/libbfd.c b/bfd/libbfd.c index 9620cda706..b43e88ca28 100644 --- a/bfd/libbfd.c +++ b/bfd/libbfd.c @@ -293,7 +293,7 @@ bfd_read (ptr, size, nitems, abfd) A BFD backend may wish to override bfd_error_file_truncated to provide something more useful (eg. no_symbols or wrong_format). */ - if (nread < (int)(size * nitems)) + if (nread != (int) (size * nitems)) { if (ferror (bfd_cache_lookup (abfd))) bfd_set_error (bfd_error_system_call); @@ -1166,13 +1166,20 @@ _bfd_generic_get_section_contents (abfd, section, location, offset, count) file_ptr offset; bfd_size_type count; { - if (count == 0) - return true; - if ((bfd_size_type)(offset+count) > section->_raw_size - || bfd_seek(abfd, (file_ptr)(section->filepos + offset), SEEK_SET) == -1 - || bfd_read(location, (bfd_size_type)1, count, abfd) != count) - return (false); /* on error */ - return (true); + if (count == 0) + return true; + + if ((bfd_size_type) (offset + count) > section->_raw_size) + { + bfd_set_error (bfd_error_invalid_operation); + return false; + } + + if (bfd_seek (abfd, section->filepos + offset, SEEK_SET) != 0 + || bfd_read (location, (bfd_size_type) 1, count, abfd) != count) + return false; + + return true; } boolean -- 2.11.0