RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  ____________________________________________________________________________

  Server: rpm5.org                         Name:   Jeff Johnson
  Root:   /v/rpm/cvs                       Email:  [EMAIL PROTECTED]
  Module: rpm                              Date:   20-Nov-2007 18:37:04
  Branch: HEAD                             Handle: 2007112017370301

  Modified files:
    rpm                     CHANGES
    rpm/lib                 rpmchecksig.c
    rpm/perl                rpmxs.c
    rpm/rpmdb               hdrfmt.c pkgio.c rpmwf.c rpmwf.h signature.c
    rpm/rpmio               librpmio.vers rpmio_internal.h rpmpgp.c rpmpgp.h
                            thkp.c tkey.c

  Log:
    - add refcounts to rpmwf and pgpDig, they're gonna be snarly.

  Summary:
    Revision    Changes     Path
    1.1852      +1  -0      rpm/CHANGES
    1.184       +5  -5      rpm/lib/rpmchecksig.c
    1.5         +2  -1      rpm/perl/rpmxs.c
    1.35        +2  -2      rpm/rpmdb/hdrfmt.c
    1.43        +2  -2      rpm/rpmdb/pkgio.c
    1.11        +34 -3      rpm/rpmdb/rpmwf.c
    1.5         +39 -0      rpm/rpmdb/rpmwf.h
    1.30        +2  -2      rpm/rpmdb/signature.c
    2.16        +5  -3      rpm/rpmio/librpmio.vers
    2.87        +2  -0      rpm/rpmio/rpmio_internal.h
    2.71        +51 -20     rpm/rpmio/rpmpgp.c
    2.55        +46 -9      rpm/rpmio/rpmpgp.h
    2.13        +3  -3      rpm/rpmio/thkp.c
    2.19        +2  -2      rpm/rpmio/tkey.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.1851 -r1.1852 CHANGES
  --- rpm/CHANGES       19 Nov 2007 21:50:17 -0000      1.1851
  +++ rpm/CHANGES       20 Nov 2007 17:37:03 -0000      1.1852
  @@ -1,4 +1,5 @@
   5.0a2 -> 5.0a3:
  +    - jbj: add refcounts to rpmwf and pgpDig, they're gonna be snarly.
       - jbj: eliminate the headerCheck recursion check. not seen w rpm code 
paths.
       - jbj: pass dig, not ts, through pkgio.c header routines.
       - jbj: eliminate 2 of 3 remaining uses of headerWrite.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/rpmchecksig.c
  ============================================================================
  $ cvs diff -u -r1.183 -r1.184 rpmchecksig.c
  --- rpm/lib/rpmchecksig.c     18 Nov 2007 22:33:21 -0000      1.183
  +++ rpm/lib/rpmchecksig.c     20 Nov 2007 17:37:03 -0000      1.184
  @@ -157,7 +157,7 @@
       he->tag = sigtag;
       xx = hge(sigh, he, 0);
       if (xx && he->p.ptr != NULL) {
  -     pgpDig dig = pgpNewDig(0);
  +     pgpDig dig = pgpDigNew(0);
   
        if (!pgpPrtPkts(he->p.ptr, he->c, dig, 0)) {
            memcpy(signid, dig->signature.signid, 
sizeof(dig->signature.signid));
  @@ -165,7 +165,7 @@
        }
        
        he->p.ptr = _free(he->p.ptr);
  -     dig = pgpFreeDig(dig);
  +     dig = pgpDigFree(dig);
       }
       return rc;
   }
  @@ -510,7 +510,7 @@
        goto exit;
   /[EMAIL PROTECTED]@*/
   
  -    dig = pgpNewDig(0);
  +    dig = pgpDigNew(0);
   
       /* Build header elements. */
       (void) pgpPrtPkts(pkt, pktlen, dig, 0);
  @@ -693,7 +693,7 @@
   exit:
       /* Clean up. */
       h = headerFree(h);
  -    dig = pgpFreeDig(dig);
  +    dig = pgpDigFree(dig);
       n = _free(n);
       u = _free(u);
       v = _free(v);
  @@ -1002,7 +1002,7 @@
   assert(she->p.ptr != NULL);
   
            /* Clean up parameters from previous she->tag. */
  -         pgpCleanDig(dig);
  +         pgpDigClean(dig);
   
   /[EMAIL PROTECTED]@*/
            xx = pgpSetSig(rpmtsDig(ts), she->tag, she->t, she->p.ptr, she->c);
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/perl/rpmxs.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 rpmxs.c
  --- rpm/perl/rpmxs.c  14 Aug 2007 01:19:41 -0000      1.4
  +++ rpm/perl/rpmxs.c  20 Nov 2007 17:37:03 -0000      1.5
  @@ -13,8 +13,9 @@
   #include <utime.h>
   #include <utime.h>
   
  -#include "rpmlib.h"
   #include "rpmio.h"
  +#include "rpmlib.h"
  +#include "rpmbuild.h"
   #include "rpmconstant.h"
   
   #include "rpmxs.h"
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/hdrfmt.c
  ============================================================================
  $ cvs diff -u -r1.34 -r1.35 hdrfmt.c
  --- rpm/rpmdb/hdrfmt.c        14 Nov 2007 23:56:33 -0000      1.34
  +++ rpm/rpmdb/hdrfmt.c        20 Nov 2007 17:37:03 -0000      1.35
  @@ -655,7 +655,7 @@
        if (pktlen == 0 || tag != PGPTAG_SIGNATURE) {
            val = xstrdup(_("(not an OpenPGP signature)"));
        } else {
  -         pgpDig dig = pgpNewDig(0);
  +         pgpDig dig = pgpDigNew(0);
            pgpDigParams sigp = pgpGetSignature(dig);
            size_t nb = 0;
            const char *tempstr;
  @@ -714,7 +714,7 @@
                goto again;
            t = stpcpy(t, tempstr);
   
  -         dig = pgpFreeDig(dig);
  +         dig = pgpDigFree(dig);
        }
       }
   
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/pkgio.c
  ============================================================================
  $ cvs diff -u -r1.42 -r1.43 pkgio.c
  --- rpm/rpmdb/pkgio.c 19 Nov 2007 22:22:09 -0000      1.42
  +++ rpm/rpmdb/pkgio.c 20 Nov 2007 17:37:03 -0000      1.43
  @@ -285,7 +285,7 @@
   {
   /[EMAIL PROTECTED]@*/ /* FIX: hide lazy malloc for now */
       if (ts->dig == NULL) {
  -     ts->dig = pgpNewDig(0);
  +     ts->dig = pgpDigNew(0);
   /[EMAIL PROTECTED]@*/
        (void) pgpSetFindPubkey(ts->dig, (int (*)(void *, void 
*))rpmtsFindPubkey, ts);
   /[EMAIL PROTECTED]@*/
  @@ -302,7 +302,7 @@
        (void) rpmswAdd(rpmtsOp(ts, opx), pgpStatsAccumulator(ts->dig, opx));
        opx = RPMTS_OP_SIGNATURE;
        (void) rpmswAdd(rpmtsOp(ts, opx), pgpStatsAccumulator(ts->dig, opx));
  -     ts->dig = pgpFreeDig(ts->dig);
  +     ts->dig = pgpDigFree(ts->dig);
       }
   }
   
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/rpmwf.c
  ============================================================================
  $ cvs diff -u -r1.10 -r1.11 rpmwf.c
  --- rpm/rpmdb/rpmwf.c 16 Nov 2007 09:40:46 -0000      1.10
  +++ rpm/rpmdb/rpmwf.c 20 Nov 2007 17:37:03 -0000      1.11
  @@ -300,12 +300,37 @@
       return RPMRC_OK;
   }
   
  +rpmwf XrpmwfUnlink(rpmwf wf, const char * msg, const char * fn, unsigned ln)
  +{
  +    if (wf == NULL) return NULL;
  +/[EMAIL PROTECTED]@*/
  +if (_rpmwf_debug && msg != NULL)
  +fprintf(stderr, "--> wf %p -- %d %s at %s:%u\n", wf, wf->nrefs, msg, fn, ln);
  +/[EMAIL PROTECTED]@*/
  +    wf->nrefs--;
  +    return NULL;
  +}
  +
  +rpmwf XrpmwfLink(rpmwf wf, const char * msg, const char * fn, unsigned ln)
  +{
  +    if (wf == NULL) return NULL;
  +    wf->nrefs++;
  +
  +/[EMAIL PROTECTED]@*/
  +if (_rpmwf_debug && msg != NULL)
  +fprintf(stderr, "--> wf %p ++ %d %s at %s:%u\n", wf, wf->nrefs, msg, fn, ln);
  +/[EMAIL PROTECTED]@*/
  +
  +    /[EMAIL PROTECTED]@*/ return wf; /[EMAIL PROTECTED]@*/
  +}
  +
   rpmwf rpmwfFree(rpmwf wf)
   {
  -if (_rpmwf_debug)
  -fprintf(stderr, "*** rpmwfFree(%p)\n", wf);
       if (wf) {
   
  +     if (wf->nrefs > 1)
  +         return rpmwfUnlink(wf, "rpmwfFree");
  +
        if (wf->b == NULL) {
   /[EMAIL PROTECTED] -onlytrans @*/    /* rpm needs dependent, xar needs only 
*/
            wf->l = _free(wf->l);
  @@ -319,7 +344,12 @@
        (void) rpmwfFiniRPM(wf);
   
        wf->fn = _free(wf->fn);
  +
  +     (void) rpmwfUnlink(wf, "rpmwfFree");
  +     /[EMAIL PROTECTED] [EMAIL PROTECTED]/
  +     memset(wf, 0, sizeof(*wf));         /* XXX trash and burn */
        wf = _free(wf);
  +     /[EMAIL PROTECTED] [EMAIL PROTECTED]/
       }
       return NULL;
   }
  @@ -340,7 +370,8 @@
   
   if (_rpmwf_debug)
   fprintf(stderr, "*** rpmwfNew(%s) wf %p nb %u\n", wf->fn, wf, 
(unsigned)wf->nb);
  -    return wf;
  +
  +    return rpmwfLink(wf, "rpmwfNew");
   }
   
   rpmwf rdRPM(const char * rpmfn)
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/rpmwf.h
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 rpmwf.h
  --- rpm/rpmdb/rpmwf.h 14 Nov 2007 23:56:33 -0000      1.4
  +++ rpm/rpmdb/rpmwf.h 20 Nov 2007 17:37:03 -0000      1.5
  @@ -32,6 +32,8 @@
       xar_iter_t i;
   #endif
       int first;
  +/[EMAIL PROTECTED]@*/
  +    int nrefs;                       /*!< Reference count. */
   };
   #endif
   
  @@ -71,6 +73,43 @@
        /[EMAIL PROTECTED] fileSystem @*/
        /[EMAIL PROTECTED] wf, fileSystem @*/;
   
  +/**
  + * Unreference a wrapper format instance.
  + * @param wf         wrapper format
  + * @param msg
  + * @return           NULL always
  + */
  +/[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/
  +rpmwf rpmwfUnlink (/[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/ /[EMAIL 
PROTECTED]@*/ rpmwf wf,
  +             /[EMAIL PROTECTED]@*/ const char * msg)
  +     /[EMAIL PROTECTED] wf @*/;
  +
  +/** @todo Remove debugging entry from the ABI. */
  +/[EMAIL PROTECTED]@*/
  +/[EMAIL PROTECTED]@*/
  +rpmwf XrpmwfUnlink (/[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/ /[EMAIL 
PROTECTED]@*/ rpmwf wf,
  +             /[EMAIL PROTECTED]@*/ const char * msg, const char * fn, 
unsigned ln)
  +     /[EMAIL PROTECTED] wf @*/;
  +/[EMAIL PROTECTED]@*/
  +#define      rpmwfUnlink(_wf, _msg)  XrpmwfUnlink(_wf, _msg, __FILE__, 
__LINE__)
  +
  +/**
  + * Reference a wrapper format instance.
  + * @param wf         wrapper format
  + * @param msg
  + * @return           new wrapper format reference
  + */
  +/[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/
  +rpmwf rpmwfLink (/[EMAIL PROTECTED]@*/ rpmwf wf, /[EMAIL PROTECTED]@*/ const 
char * msg)
  +     /[EMAIL PROTECTED] wf @*/;
  +
  +/** @todo Remove debugging entry from the ABI. */
  +/[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/
  +rpmwf XrpmwfLink (/[EMAIL PROTECTED]@*/ rpmwf wf, /[EMAIL PROTECTED]@*/ 
const char * msg,
  +             const char * fn, unsigned ln)
  +        /[EMAIL PROTECTED] wf @*/;
  +#define      rpmwfLink(_wf, _msg)    XrpmwfLink(_wf, _msg, __FILE__, 
__LINE__)
  +
   rpmwf rpmwfFree(/[EMAIL PROTECTED]@*/ rpmwf wf)
        /[EMAIL PROTECTED] fileSystem @*/
        /[EMAIL PROTECTED] wf, fileSystem @*/;
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/signature.c
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 signature.c
  --- rpm/rpmdb/signature.c     19 Nov 2007 18:57:59 -0000      1.29
  +++ rpm/rpmdb/signature.c     20 Nov 2007 17:37:03 -0000      1.30
  @@ -262,7 +262,7 @@
       rpmlog(RPMLOG_DEBUG, D_("Got %u bytes of GPG sig\n"), 
(unsigned)*pktlenp);
   
       /* Parse the signature, change signature tag as appropriate. */
  -    dig = pgpNewDig(0);
  +    dig = pgpDigNew(0);
   
       (void) pgpPrtPkts(*pktp, *pktlenp, dig, 0);
       sigp = pgpGetSignature(dig);
  @@ -287,7 +287,7 @@
        break;
       }
   
  -    dig = pgpFreeDig(dig);
  +    dig = pgpDigFree(dig);
   
       return 0;
   }
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/librpmio.vers
  ============================================================================
  $ cvs diff -u -r2.15 -r2.16 librpmio.vers
  --- rpm/rpmio/librpmio.vers   9 Nov 2007 18:00:07 -0000       2.15
  +++ rpm/rpmio/librpmio.vers   20 Nov 2007 17:37:04 -0000      2.16
  @@ -147,10 +147,13 @@
       pgpArmorKeyTbl;
       pgpArmorTbl;
       pgpArmorWrap;
  -    pgpCleanDig;
       pgpCompressionTbl;
  +    pgpDigClean;
  +    pgpDigFree;
  +    pgpDigNew;
  +    XpgpDigLink;
  +    XpgpDigUnlink;
       pgpFindPubkey;
  -    pgpFreeDig;
       pgpGetPubkey;
       pgpGetSignature;
       pgpGetSigtag;
  @@ -160,7 +163,6 @@
       pgpGetVSFlags;
       pgpHashTbl;
       pgpKeyServerPrefsTbl;
  -    pgpNewDig;
       pgpPrtComment;
       pgpPrtKey;
       pgpPrtPkt;
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmio_internal.h
  ============================================================================
  $ cvs diff -u -r2.86 -r2.87 rpmio_internal.h
  --- rpm/rpmio/rpmio_internal.h        14 Nov 2007 23:56:35 -0000      2.86
  +++ rpm/rpmio/rpmio_internal.h        20 Nov 2007 17:37:04 -0000      2.87
  @@ -77,6 +77,8 @@
        /[EMAIL PROTECTED] *_ts, *_dig @*/;/*!< Find pubkey, i.e. 
rpmtsFindPubkey(). */
   /[EMAIL PROTECTED]@*/
       void * _ts;                      /*!< Find pubkey argument, i.e. rpmts. 
*/
  +/[EMAIL PROTECTED]@*/
  +    int nrefs;                       /*!< Reference count. */
   
       byte ** ppkts;
       int npkts;
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmpgp.c
  ============================================================================
  $ cvs diff -u -r2.70 -r2.71 rpmpgp.c
  --- rpm/rpmio/rpmpgp.c        15 Nov 2007 17:27:59 -0000      2.70
  +++ rpm/rpmio/rpmpgp.c        20 Nov 2007 17:37:04 -0000      2.71
  @@ -12,7 +12,7 @@
   /[EMAIL PROTECTED] pgpPkt @*/
   
   /[EMAIL PROTECTED]@*/
  -static int _debug = 0;
  +static int _pgp_debug = 0;
   
   /[EMAIL PROTECTED]@*/
   static int _print = 0;
  @@ -272,15 +272,15 @@
       t = xmalloc(2*nbytes+1);
       ix = 2 * ((nbits - mbits) >> 3);
   
  -if (_debug)
  +if (_pgp_debug)
   fprintf(stderr, "*** mbits %u nbits %u nbytes %u t %p[%d] ix %u\n", mbits, 
nbits, nbytes, t, (2*nbytes+1), ix);
       if (ix > 0) memset(t, (int)'0', ix);
       strcpy(t+ix, pgpMpiHex(p));
  -if (_debug)
  +if (_pgp_debug)
   fprintf(stderr, "*** %s %s\n", pre, t);
       (void) mpnsethex(mpn, t);
       t = _free(t);
  -if (_debug && _print)
  +if (_pgp_debug && _print)
   fprintf(stderr, "\t %s ", pre), mpfprintln(stderr, mpn->size, mpn->data);
       return 0;
   }
  @@ -416,7 +416,7 @@
                switch (i) {
                case 0:         /* m**d */
                    (void) mpnsethex(&_dig->c, pgpMpiHex(p));
  -if (_debug && _print)
  +if (_pgp_debug && _print)
   fprintf(stderr, "\t  m**d = "),  mpfprintln(stderr, _dig->c.size, 
_dig->c.data);
                    /[EMAIL PROTECTED]@*/ break;
                default:
  @@ -518,7 +518,7 @@
        if ((p + plen) > (pp->h + pp->hlen))
            return 1;
   
  -if (_debug && _print)
  +if (_pgp_debug && _print)
   fprintf(stderr, "   hash[%u] -- %s\n", plen, pgpHexStr(p, plen));
        if (_digp && _digp->pubkey_algo == 0) {
            _digp->hashlen = sizeof(*v) + plen;
  @@ -533,7 +533,7 @@
        if ((p + plen) > (pp->h + pp->hlen))
            return 1;
   
  -if (_debug && _print)
  +if (_pgp_debug && _print)
   fprintf(stderr, " unhash[%u] -- %s\n", plen, pgpHexStr(p, plen));
        (void) pgpPrtSubType(p, plen, v->sigtype);
        p += plen;
  @@ -630,12 +630,12 @@
                switch (i) {
                case 0:         /* n */
                    (void) mpbsethex(&_dig->rsa_pk.n, pgpMpiHex(p));
  -if (_debug && _print)
  +if (_pgp_debug && _print)
   fprintf(stderr, "\t     n = "),  mpfprintln(stderr, _dig->rsa_pk.n.size, 
_dig->rsa_pk.n.modl);
                    /[EMAIL PROTECTED]@*/ break;
                case 1:         /* e */
                    (void) mpnsethex(&_dig->rsa_pk.e, pgpMpiHex(p));
  -if (_debug && _print)
  +if (_pgp_debug && _print)
   fprintf(stderr, "\t     e = "),  mpfprintln(stderr, _dig->rsa_pk.e.size, 
_dig->rsa_pk.e.data);
                    /[EMAIL PROTECTED]@*/ break;
                default:
  @@ -649,22 +649,22 @@
                switch (i) {
                case 0:         /* p */
                    (void) mpbsethex(&_dig->p, pgpMpiHex(p));
  -if (_debug && _print)
  +if (_pgp_debug && _print)
   fprintf(stderr, "\t     p = "),  mpfprintln(stderr, _dig->p.size, 
_dig->p.modl);
                    /[EMAIL PROTECTED]@*/ break;
                case 1:         /* q */
                    (void) mpbsethex(&_dig->q, pgpMpiHex(p));
  -if (_debug && _print)
  +if (_pgp_debug && _print)
   fprintf(stderr, "\t     q = "),  mpfprintln(stderr, _dig->q.size, 
_dig->q.modl);
                    /[EMAIL PROTECTED]@*/ break;
                case 2:         /* g */
                    (void) mpnsethex(&_dig->g, pgpMpiHex(p));
  -if (_debug && _print)
  +if (_pgp_debug && _print)
   fprintf(stderr, "\t     g = "),  mpfprintln(stderr, _dig->g.size, 
_dig->g.data);
                    /[EMAIL PROTECTED]@*/ break;
                case 3:         /* y */
                    (void) mpnsethex(&_dig->y, pgpMpiHex(p));
  -if (_debug && _print)
  +if (_pgp_debug && _print)
   fprintf(stderr, "\t     y = "),  mpfprintln(stderr, _dig->y.size, 
_dig->y.data);
                    /[EMAIL PROTECTED]@*/ break;
                default:
  @@ -1027,14 +1027,31 @@
       return (rc ? -1 : pp->pktlen);
   }
   
  -pgpDig pgpNewDig(pgpVSFlags vsflags)
  +pgpDig XpgpDigUnlink(pgpDig dig, const char * msg, const char * fn, unsigned 
ln)
   {
  -    pgpDig dig = xcalloc(1, sizeof(*dig));
  -    dig->vsflags = vsflags;
  -    return dig;
  +    if (dig == NULL) return NULL;
  +/[EMAIL PROTECTED]@*/
  +if (_pgp_debug && msg != NULL)
  +fprintf(stderr, "--> dig %p -- %d %s at %s:%u\n", dig, dig->nrefs, msg, fn, 
ln);
  +/[EMAIL PROTECTED]@*/
  +    dig->nrefs--;
  +    return NULL;
  +}
  +
  +pgpDig XpgpDigLink(pgpDig dig, const char * msg, const char * fn, unsigned 
ln)
  +{
  +    if (dig == NULL) return NULL;
  +    dig->nrefs++;
  +
  +/[EMAIL PROTECTED]@*/
  +if (_pgp_debug && msg != NULL)
  +fprintf(stderr, "--> dig %p ++ %d %s at %s:%u\n", dig, dig->nrefs, msg, fn, 
ln);
  +/[EMAIL PROTECTED]@*/
  +
  +    /[EMAIL PROTECTED]@*/ return dig; /[EMAIL PROTECTED]@*/
   }
   
  -void pgpCleanDig(pgpDig dig)
  +void pgpDigClean(pgpDig dig)
   {
       if (dig != NULL) {
        int i;
  @@ -1072,17 +1089,20 @@
   /[EMAIL PROTECTED]@*/
   }
   
  -pgpDig pgpFreeDig(/[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/ pgpDig dig)
  +pgpDig pgpDigFree(/[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/ pgpDig dig)
        /[EMAIL PROTECTED] dig @*/
   {
       if (dig != NULL) {
   
  +     if (dig->nrefs > 1)
  +         return pgpDigUnlink(dig, "pgpDigFree");
  +
        /* Lose the header tag data. */
        /* XXX this free should be done somewhere else. */
        dig->sig = _free(dig->sig);
   
        /* Dump the signature/pubkey data. */
  -     pgpCleanDig(dig);
  +     pgpDigClean(dig);
   
        if (dig->hdrsha1ctx != NULL)
            (void) rpmDigestFinal(dig->hdrsha1ctx, NULL, NULL, 0);
  @@ -1116,11 +1136,22 @@
        mpnfree(&dig->c);
        mpnfree(&dig->hm);
   
  +     (void) pgpDigUnlink(dig, "pgpDigFree");
  +     /[EMAIL PROTECTED] [EMAIL PROTECTED]/
  +     memset(dig, 0, sizeof(*dig));         /* XXX trash and burn */
        dig = _free(dig);
  +     /[EMAIL PROTECTED] [EMAIL PROTECTED]/
       }
       return dig;
   }
   
  +pgpDig pgpDigNew(pgpVSFlags vsflags)
  +{
  +    pgpDig dig = xcalloc(1, sizeof(*dig));
  +    dig->vsflags = vsflags;
  +    return pgpDigLink(dig, "pgpDigNew");
  +}
  +
   pgpDigParams pgpGetSignature(pgpDig dig)
   {
       return (dig ? &dig->signature : NULL);
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmpgp.h
  ============================================================================
  $ cvs diff -u -r2.54 -r2.55 rpmpgp.h
  --- rpm/rpmio/rpmpgp.h        19 Nov 2007 21:50:18 -0000      2.54
  +++ rpm/rpmio/rpmpgp.h        20 Nov 2007 17:37:04 -0000      2.55
  @@ -1358,27 +1358,64 @@
       RPMVSF_NORSA )
   
   /**
  - * Create a container for parsed OpenPGP packates.
  - * @return           container
  + * Unreference a signature parameters instance.
  + * @param dig                signature parameters
  + * @param msg
  + * @return           NULL always
    */
  -/[EMAIL PROTECTED]@*/
  -pgpDig pgpNewDig(pgpVSFlags vsflags)
  -     /[EMAIL PROTECTED]/;
  +/[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/
  +pgpDig pgpDigUnlink (/[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/ /[EMAIL 
PROTECTED]@*/ pgpDig dig,
  +             /[EMAIL PROTECTED]@*/ const char * msg)
  +     /[EMAIL PROTECTED] dig @*/;
  +
  +/** @todo Remove debugging entry from the ABI. */
  +/[EMAIL PROTECTED]@*/
  +/[EMAIL PROTECTED]@*/
  +pgpDig XpgpDigUnlink (/[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/ /[EMAIL 
PROTECTED]@*/ pgpDig dig,
  +             /[EMAIL PROTECTED]@*/ const char * msg, const char * fn, 
unsigned ln)
  +     /[EMAIL PROTECTED] dig @*/;
  +/[EMAIL PROTECTED]@*/
  +#define      pgpDigUnlink(_dig, _msg) XpgpDigUnlink(_dig, _msg, __FILE__, 
__LINE__)
   
   /**
  - * Release (malloc'd) data from container.
  - * @param dig                signature parameters container
  + * Reference a signature parameters instance.
  + * @param dig                signature parameters
  + * @param msg
  + * @return           new signature parameters reference
    */
  -void pgpCleanDig(/[EMAIL PROTECTED]@*/ pgpDig dig)
  +/[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/
  +pgpDig pgpDigLink (/[EMAIL PROTECTED]@*/ pgpDig dig, /[EMAIL PROTECTED]@*/ 
const char * msg)
        /[EMAIL PROTECTED] dig @*/;
   
  +/** @todo Remove debugging entry from the ABI. */
  +/[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/
  +pgpDig XpgpDigLink (/[EMAIL PROTECTED]@*/ pgpDig dig, /[EMAIL PROTECTED]@*/ 
const char * msg,
  +             const char * fn, unsigned ln)
  +        /[EMAIL PROTECTED] dig @*/;
  +#define      pgpDigLink(_dig, _msg)  XpgpDigLink(_dig, _msg, __FILE__, 
__LINE__)
  +
   /**
    * Destroy a container for parsed OpenPGP packates.
    * @param dig                signature parameters container
    * @return           NULL always
    */
   /[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/
  -pgpDig pgpFreeDig(/[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/ pgpDig dig)
  +pgpDig pgpDigFree(/[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/ pgpDig dig)
  +     /[EMAIL PROTECTED] dig @*/;
  +
  +/**
  + * Create a container for parsed OpenPGP packates.
  + * @return           container
  + */
  +/[EMAIL PROTECTED]@*/
  +pgpDig pgpDigNew(pgpVSFlags vsflags)
  +     /[EMAIL PROTECTED]/;
  +
  +/**
  + * Release (malloc'd) data from container.
  + * @param dig                signature parameters container
  + */
  +void pgpDigClean(/[EMAIL PROTECTED]@*/ pgpDig dig)
        /[EMAIL PROTECTED] dig @*/;
   
   /**
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/thkp.c
  ============================================================================
  $ cvs diff -u -r2.12 -r2.13 thkp.c
  --- rpm/rpmio/thkp.c  18 Sep 2007 06:47:54 -0000      2.12
  +++ rpm/rpmio/thkp.c  20 Nov 2007 17:37:04 -0000      2.13
  @@ -51,7 +51,7 @@
       int rc;
       int ec = 0;
   
  -    dig = pgpNewDig(0);
  +    dig = pgpDigNew(0);
       for (kip = keyids; *kip; kip += 2) {
        pgpArmor pa;
   
  @@ -77,12 +77,12 @@
   fprintf(stderr, "KEYID: %08x %08x\n", pgpGrab(keyid, 4), pgpGrab(keyid+4, 
4));
   
   
  -     pgpCleanDig(dig);
  +     pgpDigClean(dig);
   
        free((void *)pkt);
        pkt = NULL;
       }
  -    dig = pgpFreeDig(dig);
  +    dig = pgpDigFree(dig);
   
       return ec;
   }
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/tkey.c
  ============================================================================
  $ cvs diff -u -r2.18 -r2.19 tkey.c
  --- rpm/rpmio/tkey.c  18 Sep 2007 06:47:54 -0000      2.18
  +++ rpm/rpmio/tkey.c  20 Nov 2007 17:37:04 -0000      2.19
  @@ -106,7 +106,7 @@
       int printing = 1;
       int rc;
   
  -    dig = pgpNewDig(0);
  +    dig = pgpDigNew(0);
   
       mpbzero(&dig->p);        mpbsethex(&dig->p, fips_p);
       mpbzero(&dig->q);        mpbsethex(&dig->q, fips_q);
  @@ -176,7 +176,7 @@
       mpnfree(&dig->r);
       mpnfree(&dig->s);
   
  -    dig = pgpFreeDig(dig);
  +    dig = pgpDigFree(dig);
   
       return rc;
   }
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org

Reply via email to