]> git.pld-linux.org Git - packages/rpm.git/blame - rpm-file-readelf-fix.patch
- DSO speedup, rpmcxxflags added.
[packages/rpm.git] / rpm-file-readelf-fix.patch
CommitLineData
7dfb5338
AM
1diff -ur rpm.org/file/src/readelf.c rpm/file/src/readelf.c
2--- rpm.org/file/src/readelf.c 2004-06-14 17:19:46.426166808 +0200
3+++ rpm/file/src/readelf.c 2004-06-14 17:24:43.083068104 +0200
4@@ -136,6 +136,9 @@
5 getu32(fm, ph32.p_align) : 4) \
30427c58 6 : (off_t) (ph64.p_align ? \
7dfb5338 7 getu64(fm, ph64.p_align) : 4)))
939b513a 8+#define ph_filesz (fm->cls == ELFCLASS32 \
8f680a24
AM
9+ ? getu32(fm, ph32.p_filesz) \
10+ : getu64(fm, ph64.p_filesz))
7dfb5338 11 #define nh_size (fm->cls == ELFCLASS32 \
30427c58
JB
12 ? sizeof nh32 \
13 : sizeof nh64)
7dfb5338
AM
14@@ -244,7 +247,7 @@
15 error(EXIT_FAILURE, 0, "lseek failed (%s).\n", strerror(errno));
16 /*@notreached@*/
30427c58 17 }
7dfb5338
AM
18- bufsize = read(fm->fd, nbuf, BUFSIZ);
19+ bufsize = read(fm->fd, nbuf, ((ph_filesz < BUFSIZ) ? ph_filesz : BUFSIZ));
30427c58 20 if (bufsize == -1) {
7dfb5338
AM
21 error(EXIT_FAILURE, 0, ": " "read failed (%s).\n", strerror(errno));
22 /*@notreached@*/
23@@ -290,7 +293,7 @@
7e18e7ef 24 noff = offset;
7dfb5338 25 doff = ELF_ALIGN(offset + nh_namesz);
7e18e7ef 26
7dfb5338
AM
27- if (offset + nh_namesz >= size) {
28+ if (offset + nh_namesz > size) {
7e18e7ef
JB
29 /*
30 * We're past the end of the buffer.
31 */
7dfb5338 32@@ -298,7 +301,7 @@
7e18e7ef
JB
33 }
34
7dfb5338
AM
35 offset = ELF_ALIGN(doff + nh_descsz);
36- if (offset + nh_descsz >= size)
37+ if (doff + nh_descsz > size)
7e18e7ef
JB
38 return offset;
39
7dfb5338
AM
40 if (nh_namesz == 4 && strcmp((char *)&nbuf[noff], "GNU") == 0 &&
41@@ -601,7 +604,7 @@
42 error(EXIT_FAILURE, 0, "lseek failed (%s).\n", strerror(errno));
43 /*@notreached@*/
30427c58 44 }
7dfb5338
AM
45- bufsize = read(fm->fd, nbuf, sizeof(nbuf));
46+ bufsize = read(fm->fd, nbuf, ((ph_filesz < sizeof(nbuf)) ? ph_filesz : sizeof(nbuf)));
30427c58 47 if (bufsize == -1) {
7dfb5338
AM
48 error(EXIT_FAILURE, 0, ": " "read failed (%s).\n",
49 strerror(errno));
50@@ -614,7 +617,7 @@
51 offset = donote(fm, nbuf, offset,
52 (size_t)bufsize, ph_align);
53 }
54- if ((lseek(fm->fd, savedoffset + offset, SEEK_SET)) == (off_t)-1) {
55+ if ((lseek(fm->fd, savedoffset, SEEK_SET)) == (off_t)-1) {
56 error(EXIT_FAILURE, 0, "lseek failed (%s).\n", strerror(errno));
57 /*@notreached@*/
30427c58 58 }
This page took 0.095187 seconds and 4 git commands to generate.