diff options
Diffstat (limited to 'binutils-2.22/gold/fileread.cc')
-rw-r--r-- | binutils-2.22/gold/fileread.cc | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/binutils-2.22/gold/fileread.cc b/binutils-2.22/gold/fileread.cc index 80ddfbc..c5dc320 100644 --- a/binutils-2.22/gold/fileread.cc +++ b/binutils-2.22/gold/fileread.cc @@ -329,6 +329,10 @@ inline File_read::View* File_read::find_view(off_t start, section_size_type size, unsigned int byteshift, File_read::View** vshifted) const { + gold_assert(start <= this->size_ + && (static_cast<unsigned long long>(size) + <= static_cast<unsigned long long>(this->size_ - start))); + if (vshifted != NULL) *vshifted = NULL; @@ -456,16 +460,9 @@ File_read::make_view(off_t start, section_size_type size, unsigned int byteshift, bool cache) { gold_assert(size > 0); - - // Check that start and end of the view are within the file. - if (start > this->size_ - || (static_cast<unsigned long long>(size) - > static_cast<unsigned long long>(this->size_ - start))) - gold_fatal(_("%s: attempt to map %lld bytes at offset %lld exceeds " - "size of file; the file may be corrupt"), - this->filename().c_str(), - static_cast<long long>(size), - static_cast<long long>(start)); + gold_assert(start <= this->size_ + && (static_cast<unsigned long long>(size) + <= static_cast<unsigned long long>(this->size_ - start))); off_t poff = File_read::page_offset(start); @@ -523,6 +520,16 @@ File_read::View* File_read::find_or_make_view(off_t offset, off_t start, section_size_type size, bool aligned, bool cache) { + // Check that start and end of the view are within the file. + if (start > this->size_ + || (static_cast<unsigned long long>(size) + > static_cast<unsigned long long>(this->size_ - start))) + gold_fatal(_("%s: attempt to map %lld bytes at offset %lld exceeds " + "size of file; the file may be corrupt"), + this->filename().c_str(), + static_cast<long long>(size), + static_cast<long long>(start)); + unsigned int byteshift; if (offset == 0) byteshift = 0; |