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

(-)file-4.08/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 250-256 Link Here
250
			file_badseek(ms);
253
			file_badseek(ms);
251
			return -1;
254
			return -1;
252
		}
255
		}
253
		bufsize = read(fd, nbuf, BUFSIZ);
256
		bufsize = read(fd, nbuf, ((ph_filesz < BUFSIZ) ? ph_filesz : BUFSIZ));
254
		if (bufsize == -1) {
257
		if (bufsize == -1) {
255
			file_badread(ms);
258
			file_badread(ms);
256
			return -1;
259
			return -1;
Lines 313-319 Link Here
313
	noff = offset;
316
	noff = offset;
314
	doff = ELF_ALIGN(offset + namesz);
317
	doff = ELF_ALIGN(offset + namesz);
315
318
316
	if (offset + namesz >= size) {
319
	if (offset + namesz > size) {
317
		/*
320
		/*
318
		 * We're past the end of the buffer.
321
		 * We're past the end of the buffer.
319
		 */
322
		 */
Lines 321-327 Link Here
321
	}
324
	}
322
325
323
	offset = ELF_ALIGN(doff + descsz);
326
	offset = ELF_ALIGN(doff + descsz);
324
	if (offset + descsz >= size) {
327
	if (doff + descsz > size) {
325
		return offset;
328
		return offset;
326
	}
329
	}
327
330
Lines 670-676 Link Here
670
				file_badseek(ms);
673
				file_badseek(ms);
671
				return -1;
674
				return -1;
672
			}
675
			}
673
			bufsize = read(fd, nbuf, sizeof(nbuf));
676
			bufsize = read(fd, nbuf,
677
				((ph_filesz < sizeof(nbuf)) ? ph_filesz : sizeof(nbuf)));
674
			if (bufsize == -1) {
678
			if (bufsize == -1) {
675
				file_badread(ms);
679
				file_badread(ms);
676
				return -1;
680
				return -1;
Lines 684-690 Link Here
684
				if (offset == 0)
688
				if (offset == 0)
685
					break;
689
					break;
686
			}
690
			}
687
			if (lseek(fd, savedoffset + offset, SEEK_SET)
691
			if (lseek(fd, savedoffset, SEEK_SET)
688
			    == (off_t)-1) {
692
			    == (off_t)-1) {
689
				file_badseek(ms);
693
				file_badseek(ms);
690
				return -1;
694
				return -1;

Return to bug 63576