RPM Community Forums

Mailing List Message of <rpm-cvs>

[CVS] RPM: rpm/ CHANGES rpm/lib/ rpmts.h rpm/rpmdb/ pkgio.c rpmdb.c rp...

From: Jeff Johnson <jbj@rpm5.org>
Date: Tue 20 Nov 2007 - 19:44:25 CET
Message-Id: <20071120184425.81ECE34845D@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:   20-Nov-2007 19:44:25
  Branch: HEAD                             Handle: 2007112018442401

  Modified files:
    rpm                     CHANGES
    rpm/lib                 rpmts.h
    rpm/rpmdb               pkgio.c rpmdb.c rpmwf.c rpmwf.h
    rpm/rpmio               rpmio.c rpmio.h rpmio_internal.h rpmpgp.c rpmpgp.h

  Log:
    - jbj: splint fiddles for refcounted storage.

  Summary:
    Revision    Changes     Path
    1.1853      +1  -0      rpm/CHANGES
    2.87        +1  -2      rpm/lib/rpmts.h
    1.44        +6  -2      rpm/rpmdb/pkgio.c
    1.216       +0  -1      rpm/rpmdb/rpmdb.c
    1.12        +4  -2      rpm/rpmdb/rpmwf.c
    1.6         +4  -1      rpm/rpmdb/rpmwf.h
    1.105       +5  -0      rpm/rpmio/rpmio.c
    1.63        +1  -1      rpm/rpmio/rpmio.h
    2.88        +2  -0      rpm/rpmio/rpmio_internal.h
    2.72        +12 -6      rpm/rpmio/rpmpgp.c
    2.56        +3  -3      rpm/rpmio/rpmpgp.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.1852 -r1.1853 CHANGES
  --- rpm/CHANGES	20 Nov 2007 17:37:03 -0000	1.1852
  +++ rpm/CHANGES	20 Nov 2007 18:44:24 -0000	1.1853
  @@ -1,4 +1,5 @@
   5.0a2 -> 5.0a3:
  +    - jbj: splint fiddles for refcounted storage.
       - 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.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/rpmts.h
  ============================================================================
  $ cvs diff -u -r2.86 -r2.87 rpmts.h
  --- rpm/lib/rpmts.h	12 Nov 2007 12:30:46 -0000	2.86
  +++ rpm/lib/rpmts.h	20 Nov 2007 18:44:24 -0000	2.87
  @@ -222,7 +222,7 @@
   
       struct rpmop_s ops[RPMTS_OP_MAX];
   
  -/*@relnull@*/
  +/*@refcounted@*/ /*@relnull@*/
       pgpDig dig;			/*!< Current signature/pubkey parameters. */
   
   /*@null@*/
  @@ -698,7 +698,6 @@
    * @param ts		transaction set
    * @return		signature/pubkey constants.
    */
  -/*@exposed@*/
   pgpDig rpmtsDig(rpmts ts)
   	/*@*/;
   
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/pkgio.c
  ============================================================================
  $ cvs diff -u -r1.43 -r1.44 pkgio.c
  --- rpm/rpmdb/pkgio.c	20 Nov 2007 17:37:03 -0000	1.43
  +++ rpm/rpmdb/pkgio.c	20 Nov 2007 18:44:24 -0000	1.44
  @@ -291,7 +291,9 @@
   /*@=refcounttrans@*/
       }
   /*@=mods@*/
  +/*@-compdef -retexpose -usereleased@*/
       return ts->dig;
  +/*@=compdef =retexpose =usereleased@*/
   }
   
   void rpmtsCleanDig(rpmts ts)
  @@ -302,7 +304,9 @@
   	(void) rpmswAdd(rpmtsOp(ts, opx), pgpStatsAccumulator(ts->dig, opx));
   	opx = RPMTS_OP_SIGNATURE;
   	(void) rpmswAdd(rpmtsOp(ts, opx), pgpStatsAccumulator(ts->dig, opx));
  +/*@-onlytrans@*/
   	ts->dig = pgpDigFree(ts->dig);
  +/*@=onlytrans@*/
       }
   }
   
  @@ -1368,9 +1372,9 @@
       rpmwf wf = fdGetWF(fd);
       if (wf != NULL) {
   	fdSetWF(fd, NULL);
  -/*@-dependenttrans -modfilesys -observertrans @*/
  +/*@-dependenttrans -modfilesys -observertrans -refcounttrans @*/
   	wf = rpmwfFree(wf);
  -/*@=dependenttrans =modfilesys =observertrans @*/
  +/*@=dependenttrans =modfilesys =observertrans =refcounttrans @*/
       }
       return RPMRC_OK;
   }
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/rpmdb.c
  ============================================================================
  $ cvs diff -u -r1.215 -r1.216 rpmdb.c
  --- rpm/rpmdb/rpmdb.c	19 Nov 2007 22:22:09 -0000	1.215
  +++ rpm/rpmdb/rpmdb.c	20 Nov 2007 18:44:24 -0000	1.216
  @@ -22,7 +22,6 @@
   
   /* XXX avoid including <rpmts.h> */
   /*@-redecl -type @*/
  -/*@exposed@*/
   extern pgpDig rpmtsDig(void * ts)
           /*@*/;
   extern void rpmtsCleanDig(void * ts)
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/rpmwf.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 rpmwf.c
  --- rpm/rpmdb/rpmwf.c	20 Nov 2007 17:37:03 -0000	1.11
  +++ rpm/rpmdb/rpmwf.c	20 Nov 2007 18:44:24 -0000	1.12
  @@ -328,16 +328,17 @@
   {
       if (wf) {
   
  +/*@-onlytrans@*/
   	if (wf->nrefs > 1)
   	    return rpmwfUnlink(wf, "rpmwfFree");
   
   	if (wf->b == NULL) {
  -/*@-dependenttrans -onlytrans @*/	/* rpm needs dependent, xar needs only */
  +/*@-dependenttrans@*/	/* rpm needs dependent, xar needs only */
   	    wf->l = _free(wf->l);
   	    wf->s = _free(wf->s);
   	    wf->h = _free(wf->h);
   	    wf->p = _free(wf->p);
  -/*@=dependenttrans =onlytrans @*/
  +/*@=dependenttrans@*/
   	}
   
   	(void) rpmwfFiniXAR(wf);
  @@ -346,6 +347,7 @@
   	wf->fn = _free(wf->fn);
   
   	(void) rpmwfUnlink(wf, "rpmwfFree");
  +/*@=onlytrans@*/
   	/*@-refcounttrans -usereleased@*/
   	memset(wf, 0, sizeof(*wf));         /* XXX trash and burn */
   	wf = _free(wf);
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/rpmwf.h
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 rpmwf.h
  --- rpm/rpmdb/rpmwf.h	20 Nov 2007 17:37:03 -0000	1.5
  +++ rpm/rpmdb/rpmwf.h	20 Nov 2007 18:44:24 -0000	1.6
  @@ -4,10 +4,11 @@
   /*@unchecked@*/
   extern int _rpmwf_debug;
   
  -typedef /*@abstract@*/ struct rpmwf_s * rpmwf;
  +typedef /*@abstract@*/ /*@refcounted@*/ struct rpmwf_s * rpmwf;
   
   #ifdef	_RPMWF_INTERNAL
   struct rpmwf_s {
  +/*@relnull@*/
       const char * fn;
   /*@relnull@*/
       FD_t fd;
  @@ -110,10 +111,12 @@
           /*@modifies wf @*/;
   #define	rpmwfLink(_wf, _msg)	XrpmwfLink(_wf, _msg, __FILE__, __LINE__)
   
  +/*@null@*/
   rpmwf rpmwfFree(/*@only@*/ rpmwf wf)
   	/*@globals fileSystem @*/
   	/*@modifies wf, fileSystem @*/;
   
  +/*@relnull@*/
   rpmwf rpmwfNew(const char * fn)
   	/*@globals fileSystem @*/
   	/*@modifies fileSystem @*/;
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmio.c
  ============================================================================
  $ cvs diff -u -r1.104 -r1.105 rpmio.c
  --- rpm/rpmio/rpmio.c	19 Nov 2007 18:57:59 -0000	1.104
  +++ rpm/rpmio/rpmio.c	20 Nov 2007 18:44:25 -0000	1.105
  @@ -344,6 +344,10 @@
   	    fddig->hashctx = NULL;
   	}
   	fd->ndigests = 0;
  +/*@-onlytrans@*/
  +	fd->dig = pgpDigFree(fd->dig);
  +/*@=onlytrans@*/
  +	memset(fd, 0, sizeof(*fd));	/* XXX trash and burn */
   	/*@-refcounttrans@*/ free(fd); /*@=refcounttrans@*/
       }
       return NULL;
  @@ -380,6 +384,7 @@
       fd->errcookie = NULL;
       fd->stats = xcalloc(1, sizeof(*fd->stats));
       fd->wf = NULL;
  +    fd->dig = NULL;
   
       fd->ndigests = 0;
       memset(fd->digests, 0, sizeof(fd->digests));
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmio.h
  ============================================================================
  $ cvs diff -u -r1.62 -r1.63 rpmio.h
  --- rpm/rpmio/rpmio.h	19 Nov 2007 18:57:59 -0000	1.62
  +++ rpm/rpmio/rpmio.h	20 Nov 2007 18:44:25 -0000	1.63
  @@ -18,7 +18,7 @@
   
   /**
    */
  -typedef /*@abstract@*/ struct pgpDig_s * pgpDig;
  +typedef /*@abstract@*/ /*@refcounted@*/ struct pgpDig_s * pgpDig;
   
   /**
    */
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmio_internal.h
  ============================================================================
  $ cvs diff -u -r2.87 -r2.88 rpmio_internal.h
  --- rpm/rpmio/rpmio_internal.h	20 Nov 2007 17:37:04 -0000	2.87
  +++ rpm/rpmio/rpmio_internal.h	20 Nov 2007 18:44:25 -0000	2.88
  @@ -189,6 +189,8 @@
   
   /*@kept@*/
       void *	wf;		/* wrapper format descriptor */
  +/*@refcounted@*/ /*@relnull@*/
  +    pgpDig	dig;		/* signature parameters */
   
       FDSTAT_t	stats;		/* I/O statistics */
   
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmpgp.c
  ============================================================================
  $ cvs diff -u -r2.71 -r2.72 rpmpgp.c
  --- rpm/rpmio/rpmpgp.c	20 Nov 2007 17:37:04 -0000	2.71
  +++ rpm/rpmio/rpmpgp.c	20 Nov 2007 18:44:25 -0000	2.72
  @@ -17,7 +17,7 @@
   /*@unchecked@*/
   static int _print = 0;
   
  -/*@unchecked@*/ /*@null@*/
  +/*@unchecked@*/ /*@refcounted@*/ /*@relnull@*/
   static pgpDig _dig = NULL;
   
   /*@unchecked@*/ /*@null@*/
  @@ -1089,11 +1089,11 @@
   /*@=nullstate@*/
   }
   
  -pgpDig pgpDigFree(/*@only@*/ /*@null@*/ pgpDig dig)
  -	/*@modifies dig @*/
  +pgpDig pgpDigFree(pgpDig dig)
   {
       if (dig != NULL) {
   
  +/*@-onlytrans@*/
   	if (dig->nrefs > 1)
   	    return pgpDigUnlink(dig, "pgpDigFree");
   
  @@ -1137,12 +1137,13 @@
   	mpnfree(&dig->hm);
   
   	(void) pgpDigUnlink(dig, "pgpDigFree");
  +/*@=onlytrans@*/
   	/*@-refcounttrans -usereleased@*/
   	memset(dig, 0, sizeof(*dig));         /* XXX trash and burn */
   	dig = _free(dig);
   	/*@=refcounttrans =usereleased@*/
       }
  -    return dig;
  +    return NULL;
   }
   
   pgpDig pgpDigNew(pgpVSFlags vsflags)
  @@ -1292,6 +1293,7 @@
       return 0;
   }
   
  +/*@-globstate -nullderef @*/	/* _dig annotation are not correct. */
   int pgpPrtPkts(const byte * pkts, size_t pktlen, pgpDig dig, int printing)
   	/*@globals _dig, _digp, _print @*/
   	/*@modifies _dig, _digp, *_digp, _print @*/
  @@ -1305,7 +1307,7 @@
       int i;
   
       _print = printing;
  -    _dig = dig;
  +    _dig = pgpDigLink(dig, "pgpPrtPkts");
       if (dig != NULL && (val & 0x80)) {
   	pgpTag tag = (val & 0x40) ? (val & 0x3f) : ((val >> 2) & 0xf);
   	_digp = (tag == PGPTAG_SIGNATURE) ? &_dig->signature : &_dig->pubkey;
  @@ -1313,8 +1315,10 @@
       } else
   	_digp = NULL;
   
  -    if (pgpGrabPkts(pkts, pktlen, &ppkts, &npkts) || ppkts == NULL)
  +    if (pgpGrabPkts(pkts, pktlen, &ppkts, &npkts) || ppkts == NULL) {
  +	_dig = pgpDigFree(_dig);
   	return -1;
  +    }
   
       if (ppkts != NULL)
       for (i = 0, pleft = pktlen; i < npkts; i++, pleft -= len) {
  @@ -1329,8 +1333,10 @@
       } else
   	ppkts = _free(ppkts);
   
  +    _dig = pgpDigFree(_dig);
       return 0;
   }
  +/*@=globstate =nullderef @*/
   
   pgpArmor pgpReadPkts(const char * fn, const byte ** pkt, size_t * pktlen)
   {
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmpgp.h
  ============================================================================
  $ cvs diff -u -r2.55 -r2.56 rpmpgp.h
  --- rpm/rpmio/rpmpgp.h	20 Nov 2007 17:37:04 -0000	2.55
  +++ rpm/rpmio/rpmpgp.h	20 Nov 2007 18:44:25 -0000	2.56
  @@ -1399,15 +1399,15 @@
    * @param dig		signature parameters container
    * @return		NULL always
    */
  -/*@only@*/ /*@null@*/
  -pgpDig pgpDigFree(/*@only@*/ /*@null@*/ pgpDig dig)
  +/*@null@*/
  +pgpDig pgpDigFree(/*@killref@*/ /*@only@*/ /*@null@*/ pgpDig dig)
   	/*@modifies dig @*/;
   
   /**
    * Create a container for parsed OpenPGP packates.
    * @return		container
    */
  -/*@only@*/
  +/*@relnull@*/
   pgpDig pgpDigNew(pgpVSFlags vsflags)
   	/*@*/;
   
  @@ .
Received on Tue Nov 20 19:44:25 2007
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.