View | Details | Raw Unified | Return to bug 63576
Collapse All | Expand All

(-)file-4.07/src/readelf.c.orig (-5 / +9 lines)
Lines 147-152 Link Here
147
			    getu32(swap, ph32.p_align) : 4) \
147
			    getu32(swap, ph32.p_align) : 4) \
148
			 : (off_t) (ph64.p_align ?	\
148
			 : (off_t) (ph64.p_align ?	\
149
			    getu64(swap, ph64.p_align) : 4)))
149
			    getu64(swap, ph64.p_align) : 4)))
150
#define ph_filesz	(class == ELFCLASS32		\
151
			 ? getu32(swap, ph32.p_filesz)	\
152
			 : getu64(swap, ph64.p_filesz))
150
#define nh_size		(class == ELFCLASS32		\
153
#define nh_size		(class == ELFCLASS32		\
151
			 ? sizeof nh32			\
154
			 ? sizeof nh32			\
152
			 : sizeof nh64)
155
			 : sizeof nh64)
Lines 249-255 Link Here
249
			file_badseek(ms);
252
			file_badseek(ms);
250
			return -1;
253
			return -1;
251
		}
254
		}
252
		bufsize = read(fd, nbuf, BUFSIZ);
255
		bufsize = read(fd, nbuf, ((ph_filesz < BUFSIZ) ? ph_filesz : BUFSIZ));
253
		if (bufsize == -1) {
256
		if (bufsize == -1) {
254
			file_badread(ms);
257
			file_badread(ms);
255
			return -1;
258
			return -1;
Lines 297-303 Link Here
297
	noff = offset;
297
	noff = offset;
298
	doff = ELF_ALIGN(offset + nh_namesz);
298
	doff = ELF_ALIGN(offset + nh_namesz);
299
299
300
	if (offset + nh_namesz >= size) {
300
	if (doff > size) {
301
		/*
301
		/*
302
		 * We're past the end of the buffer.
302
		 * We're past the end of the buffer.
303
		 */
303
		 */
Lines 305-311 Link Here
305
	}
305
	}
306
306
307
	offset = ELF_ALIGN(doff + nh_descsz);
307
	offset = ELF_ALIGN(doff + nh_descsz);
308
	if (offset + nh_descsz >= size)
308
	if (offset > size)
309
		return offset;
309
		return offset;
310
310
311
	if (nh_namesz == 4 && strcmp((char *)&nbuf[noff], "GNU") == 0 &&
311
	if (nh_namesz == 4 && strcmp((char *)&nbuf[noff], "GNU") == 0 &&
Lines 622-628 Link Here
622
				file_badseek(ms);
625
				file_badseek(ms);
623
				return -1;
626
				return -1;
624
			}
627
			}
625
			bufsize = read(fd, nbuf, sizeof(nbuf));
628
			bufsize = read(fd, nbuf,
629
				((ph_filesz < sizeof(nbuf)) ? ph_filesz : sizeof(nbuf)));
626
			if (bufsize == -1) {
630
			if (bufsize == -1) {
627
				file_badread(ms);
631
				file_badread(ms);
628
				return -1;
632
				return -1;
Lines 634-640 Link Here
634
				offset = donote(ms, nbuf, offset,
638
				offset = donote(ms, nbuf, offset,
635
				    (size_t)bufsize, class, swap, ph_align);
639
				    (size_t)bufsize, class, swap, ph_align);
636
			}
640
			}
637
			if (lseek(fd, savedoffset + offset, SEEK_SET)
641
			if (lseek(fd, savedoffset, SEEK_SET)
638
			    == (off_t)-1) {
642
			    == (off_t)-1) {
639
				file_badseek(ms);
643
				file_badseek(ms);
640
				return -1;
644
				return -1;

Return to bug 63576