]>
Commit | Line | Data |
---|---|---|
30427c58 JB |
1 | --- rpm-4.3/file/src/readelf.c.orig 2004-03-19 21:12:58.000000000 +0100 |
2 | +++ rpm-4.3/file/src/readelf.c 2004-03-19 22:31:34.199417626 +0100 | |
3 | @@ -136,6 +136,9 @@ | |
4 | getu32(fm, ph32.p_align) : 4) \ | |
5 | : (off_t) (ph64.p_align ? \ | |
6 | getu64(fm, ph64.p_align) : 4))) | |
7 | +#define ph_filesz (fm->cls == ELFCLASS32 \ | |
8 | + ? getu32(fm, ph32.p_filesz) \ | |
9 | + : getu64(fm, ph64.p_filesz)) | |
10 | #define nh_size (fm->cls == ELFCLASS32 \ | |
11 | ? sizeof nh32 \ | |
12 | : sizeof nh64) | |
13 | @@ -244,7 +247,7 @@ | |
14 | error(EXIT_FAILURE, 0, "lseek failed (%s).\n", strerror(errno)); | |
15 | /*@notreached@*/ | |
16 | } | |
17 | - bufsize = read(fm->fd, nbuf, BUFSIZ); | |
18 | + bufsize = read(fm->fd, nbuf, ((ph_filesz < BUFSIZ) ? ph_filesz : BUFSIZ)); | |
19 | if (bufsize == -1) { | |
20 | error(EXIT_FAILURE, 0, ": " "read failed (%s).\n", strerror(errno)); | |
21 | /*@notreached@*/ | |
22 | @@ -601,7 +604,8 @@ | |
23 | error(EXIT_FAILURE, 0, "lseek failed (%s).\n", strerror(errno)); | |
24 | /*@notreached@*/ | |
25 | } | |
26 | - bufsize = read(fm->fd, nbuf, sizeof(nbuf)); | |
27 | + bufsize = read(fm->fd, nbuf, | |
28 | + ((ph_filesz < sizeof(nbuf)) ? ph_filesz : sizeof(nbuf))); | |
29 | if (bufsize == -1) { | |
30 | error(EXIT_FAILURE, 0, ": " "read failed (%s).\n", | |
31 | strerror(errno)); | |
32 | @@ -614,7 +618,7 @@ | |
33 | offset = donote(fm, nbuf, offset, | |
34 | (size_t)bufsize, ph_align); | |
35 | } | |
36 | - if ((lseek(fm->fd, savedoffset + offset, SEEK_SET)) == (off_t)-1) { | |
37 | + if ((lseek(fm->fd, savedoffset, SEEK_SET)) == (off_t)-1) { | |
38 | error(EXIT_FAILURE, 0, "lseek failed (%s).\n", strerror(errno)); | |
39 | /*@notreached@*/ | |
40 | } |