This is the mail archive of the elfutils-devel@sourceware.org mailing list for the elfutils project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On Sat, Dec 27, 2014 at 04:31:14AM +0300, Alexander Cherepanov wrote: > On 2014-12-27 01:00, Mark Wielaard wrote: > >diff --git a/src/strings.c b/src/strings.c > >index f60e4b4..d1eb7b2 100644 > >--- a/src/strings.c > >+++ b/src/strings.c > >@@ -725,8 +725,21 @@ read_elf (Elf *elf, int fd, const char *fname, off64_t fdlen) > > actually have content. */ > > if (shdr != NULL && shdr->sh_type != SHT_NOBITS > > && (shdr->sh_flags & SHF_ALLOC) != 0) > >- result |= read_block (fd, fname, fdlen, shdr->sh_offset, > >- shdr->sh_offset + shdr->sh_size); > >+ { > >+ if (shdr->sh_offset > fdlen > >+ || fdlen - shdr->sh_offset < shdr->sh_size) > >+ { > > It fails to build for me: > > strings.c: In function 'read_elf': > strings.c:729:24: error: comparison between signed and unsigned integer > expressions [-Werror=sign-compare] > if (shdr->sh_offset > fdlen The compiler is correct. sh_offset is an unsigned Elf64_Off and fdlen is a signed off64_t. But just before we already checked fdlen >= 0, so we can just cast it to Elf64_Off safely for this comparison. As attached. Thanks, Mark
Attachment:
0001-strings-Produce-error-when-section-data-falls-outsid.patch
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |