RPM Package Manager, CVS Repository
http://rpm5.org/cvs/
____________________________________________________________________________
Server: rpm5.org Name: Jeff Johnson
Root: /v/rpm/cvs Email: jbj@rpm5.org
Module: rpm Date: 14-Oct-2007 18:07:15
Branch: HEAD Handle: 2007101417071401
Modified files:
rpm CHANGES
rpm/lib package.c
Log:
- package.c: use headerGetExtension everywhere (fix double free).
Summary:
Revision Changes Path
1.1696 +2 -1 rpm/CHANGES
2.171 +25 -5 rpm/lib/package.c
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: rpm/CHANGES
============================================================================
$ cvs diff -u -r1.1695 -r1.1696 CHANGES
--- rpm/CHANGES 14 Oct 2007 15:24:48 -0000 1.1695
+++ rpm/CHANGES 14 Oct 2007 16:07:14 -0000 1.1696
@@ -1,5 +1,6 @@
4.5 -> 5.0:
- - jbj: fx: grr, headerGetEntry return code is backwards.
+ - jbj: package.c: use headerGetExtension everywhere (fix double free).
+ - jbj: fix: grr, headerGetEntry return code is backwards.
- jbj: clean up some warnings.
- jbj: change HGE_t prototype to see what remains to be fixed.
- jbj: rpmsignature.c: use headerGetExtension everywhere.
@@ .
patch -p0 <<'@@ .'
Index: rpm/lib/package.c
============================================================================
$ cvs diff -u -r2.170 -r2.171 package.c
--- rpm/lib/package.c 13 Oct 2007 08:42:08 -0000 2.170
+++ rpm/lib/package.c 14 Oct 2007 16:07:15 -0000 2.171
@@ -184,6 +184,12 @@
/*@-mods@*/
rpmRC rpmReadPackageFile(rpmts ts, void * _fd, const char * fn, Header * hdrp)
{
+ HGE_t hge = (HGE_t)headerGetExtension;
+ int_32 he_t = 0;
+ hRET_t he_p = { .ptr = NULL };
+ int_32 he_c = 0;
+ HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
+ HE_t he = &he_s;
pgpDig dig = rpmtsDig(ts);
FD_t fd = _fd;
char buf[8*BUFSIZ];
@@ -346,7 +352,11 @@
/* Retrieve the tag parameters from the signature header. */
sig = NULL;
- xx = headerGetEntry(sigh, sigtag, &sigtype, (void **) &sig, &siglen);
+ he->tag = sigtag;
+ xx = hge(sigh, he->tag, he->t, he->p, he->c);
+ sigtype = he_t;
+ sig = he_p.ptr;
+ siglen = he_c;
if (sig == NULL) {
rc = RPMRC_FAIL;
goto exit;
@@ -372,7 +382,12 @@
unsigned char * hmagic = NULL;
size_t nmagic = 0;
- if (!headerGetEntry(h, RPMTAG_HEADERIMMUTABLE, &uht, &uh, &uhc))
+ he->tag = RPMTAG_HEADERIMMUTABLE;
+ xx = hge(h, he->tag, he->t, he->p, he->c);
+ uht = he_t;
+ uh = he_p.ptr;
+ uhc = he_c;
+ if (!xx)
break;
(void) headerGetMagic(NULL, &hmagic, &nmagic);
op = pgpStatsAccumulator(dig, 10); /* RPMTS_OP_DIGEST */
@@ -386,7 +401,7 @@
dig->nbytes += uhc;
(void) rpmswExit(op, dig->nbytes);
op->count--; /* XXX one too many */
- uh = headerFreeData(uh, uht);
+ uh = _free(uh);
} break;
case RPMSIGTAG_DSA:
/* Parse the parameters from the OpenPGP packets that will be needed. */
@@ -406,7 +421,12 @@
unsigned char * hmagic = NULL;
size_t nmagic = 0;
- if (!headerGetEntry(h, RPMTAG_HEADERIMMUTABLE, &uht, &uh, &uhc))
+ he->tag = RPMTAG_HEADERIMMUTABLE;
+ xx = hge(h, he->tag, he->t, he->p, he->c);
+ uht = he_t;
+ uh = he_p.ptr;
+ uhc = he_c;
+ if (!xx)
break;
(void) headerGetMagic(NULL, &hmagic, &nmagic);
op = pgpStatsAccumulator(dig, 10); /* RPMTS_OP_DIGEST */
@@ -421,7 +441,7 @@
(void) rpmswExit(op, dig->nbytes);
if (sigtag == RPMSIGTAG_SHA1)
op->count--; /* XXX one too many */
- uh = headerFreeData(uh, uht);
+ uh = _free(uh);
} break;
#if defined(SUPPORT_RPMV3_VERIFY_DSA) || defined(SUPPORT_RPMV3_VERIFY_RSA)
#if defined(SUPPORT_RPMV3_VERIFY_DSA)
@@ .
Received on Sun Oct 14 18:07:15 2007