--- file-4.10/src/readelf.c.orig 2004-07-24 22:57:22.000000000 +0200 +++ file-4.10/src/readelf.c 2004-07-26 22:04:48.734248992 +0200 @@ -256,7 +256,7 @@ file_badseek(ms); return -1; } - bufsize = read(fd, nbuf, sizeof(nbuf)); + bufsize = read(fd, nbuf, ((ph_filesz < sizeof(nbuf)) ? ph_filesz : sizeof(nbuf))); if (bufsize == -1) { file_badread(ms); return -1; @@ -327,7 +327,7 @@ } offset = ELF_ALIGN(doff + descsz); - if (offset + descsz > size) { + if (doff + descsz > size) { return offset; } @@ -693,7 +693,8 @@ file_badseek(ms); return -1; } - bufsize = read(fd, nbuf, sizeof(nbuf)); + bufsize = read(fd, nbuf, + ((ph_filesz < sizeof(nbuf)) ? ph_filesz : sizeof(nbuf))); if (bufsize == -1) { file_badread(ms); return -1;