diff options
author | Ian Lance Taylor <ian@airs.com> | 1999-11-09 19:13:21 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@airs.com> | 1999-11-09 19:13:21 +0000 |
commit | 0bff3f4bb6e2ad90568897c3a233919f9b6bf51a (patch) | |
tree | cc100b3a1447fed264646eb697d1ffc4a0f3b936 /bfd/libbfd.c | |
parent | a8c5faf7f683b74bcca09a8efd7bff654677fb13 (diff) | |
download | gdb-0bff3f4bb6e2ad90568897c3a233919f9b6bf51a.zip gdb-0bff3f4bb6e2ad90568897c3a233919f9b6bf51a.tar.gz gdb-0bff3f4bb6e2ad90568897c3a233919f9b6bf51a.tar.bz2 |
* 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.
Diffstat (limited to 'bfd/libbfd.c')
-rw-r--r-- | bfd/libbfd.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/bfd/libbfd.c b/bfd/libbfd.c index 9620cda..b43e88c 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 |