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