RPM Community Forums

Mailing List Message of <rpm-cvs>

[CVS] RPM: rpm/ CHANGES rpm/lib/ package.c

From: Jeff Johnson <jbj@rpm5.org>
Date: Sun 14 Oct 2007 - 18:07:15 CEST
Message-Id: <20071014160715.5E653348466@rpm5.org>
  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
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.