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: 16-Oct-2007 02:48:15
Branch: HEAD Handle: 2007101601481400
Modified files:
rpm/rpmdb hdrfmt.c header.c rpmdb.c sqlite.c
Log:
- rpmdb splint fiddles.
Summary:
Revision Changes Path
1.10 +115 -62 rpm/rpmdb/hdrfmt.c
1.79 +16 -5 rpm/rpmdb/header.c
1.184 +16 -11 rpm/rpmdb/rpmdb.c
1.17 +2 -0 rpm/rpmdb/sqlite.c
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: rpm/rpmdb/hdrfmt.c
============================================================================
$ cvs diff -u -r1.9 -r1.10 hdrfmt.c
--- rpm/rpmdb/hdrfmt.c 15 Oct 2007 22:44:48 -0000 1.9
+++ rpm/rpmdb/hdrfmt.c 16 Oct 2007 00:48:14 -0000 1.10
@@ -885,12 +885,16 @@
xx = headerGetEntry(h, RPMTAG_TRIGGERFLAGS, NULL, &flags, NULL);
xx = headerGetEntry(h, RPMTAG_TRIGGERVERSION, NULL, &versions, NULL);
xx = headerGetEntry(h, RPMTAG_TRIGGERSCRIPTS, NULL, &s, &numScripts);
- s = headerFreeData(s, -1);
+
+ if (he->t)
+ *he->t = RPM_STRING_ARRAY_TYPE;
+ if (he->c)
+ *he->c = numScripts;
+ if (he->p == NULL)
+ goto exit;
he->freeData = 1;
- (*he->p).ptr = conds = xmalloc(sizeof(*conds) * numScripts);
- *he->c = numScripts;
- *he->t = RPM_STRING_ARRAY_TYPE;
+ (*he->p).argv = conds = xmalloc(sizeof(*conds) * numScripts);
for (i = 0; i < numScripts; i++) {
chptr = xstrdup("");
@@ -904,9 +908,8 @@
flagsStr = depflagsFormat(RPM_INT32_TYPE, flags, buf, 0, j);
sprintf(item, "%s %s %s", names[j], flagsStr, versions[j]);
flagsStr = _free(flagsStr);
- } else {
+ } else
strcpy(item, names[j]);
- }
chptr = xrealloc(chptr, strlen(chptr) + strlen(item) + 5);
if (*chptr != '\0') strcat(chptr, ", ");
@@ -917,8 +920,10 @@
conds[i] = chptr;
}
+exit:
names = headerFreeData(names, -1);
versions = headerFreeData(versions, -1);
+ s = headerFreeData(s, -1);
return 0;
}
@@ -944,12 +949,16 @@
xx = headerGetEntry(h, RPMTAG_TRIGGERFLAGS, NULL, &flags, NULL);
xx = headerGetEntry(h, RPMTAG_TRIGGERSCRIPTS, NULL, &s, &numScripts);
- s = headerFreeData(s, -1);
+
+ if (he->t)
+ *he->t = RPM_STRING_ARRAY_TYPE;
+ if (he->c)
+ *he->c = numScripts;
+ if (he->p == NULL)
+ goto exit;
he->freeData = 1;
- *he->t = RPM_STRING_ARRAY_TYPE;
- (*he->p).ptr = conds = xmalloc(sizeof(*conds) * numScripts);
- *he->c = numScripts;
+ (*he->p).argv = conds = xmalloc(sizeof(*conds) * numScripts);
for (i = 0; i < numScripts; i++) {
for (j = 0; j < numNames; j++) {
if (indices[j] != i)
@@ -969,6 +978,8 @@
}
}
+exit:
+ s = headerFreeData(s, -1);
return 0;
}
@@ -997,11 +1008,14 @@
/*@modifies he, rpmGlobalMacroContext @*/
{
char * dstring = rpmExpand(_macro_i18ndomains, NULL);
- int rc;
+ int rc = 1; /* assume failure */
- *he->t = RPM_STRING_TYPE;
- (*he->p).ptr = NULL;
- *he->c = 0;
+ if (he->t)
+ *he->t = RPM_STRING_TYPE;
+ if (he->p)
+ (*he->p).ptr = NULL;
+ if (he->c)
+ *he->c = 0;
he->freeData = 0;
if (dstring && *dstring) {
@@ -1049,29 +1063,46 @@
if (domain && msgid) {
const char * s = /*@-unrecog@*/ dgettext(domain, msgid) /*@=unrecog@*/;
- (*he->p).str = xstrdup(s); /* XXX xstrdup has side effects. */
- *he->c = 1;
- he->freeData = 1;
+ if (s) {
+ rc = 0;
+ if (he->p) {
+ (*he->p).str = xstrdup(s);
+ he->freeData = 1;
+ } else
+ he->freeData = 0;
+ if (he->c)
+ *he->c = 1;
+ }
}
- dstring = _free(dstring);
- if ((*he->p).str)
- return 0;
}
+/*@-dependenttrans@*/
dstring = _free(dstring);
+/*@=dependenttrans@*/
+ if (!rc)
+ return rc;
rc = headerGetEntry(h, he->tag, he->t, he->p, he->c);
-
- if (rc && (*he->p).ptr != NULL) {
- (*he->p).str = xstrdup((*he->p).str);
- (*he->p).str = xstrtolocale((*he->p).str);
- he->freeData = 1;
- return 0;
+ if (rc) {
+ rc = 0;
+ if (he->p) {
+ (*he->p).str = xstrdup((*he->p).str);
+ (*he->p).str = xstrtolocale((*he->p).str);
+ he->freeData = 1;
+ }
+/*@-nullstate@*/
+ return rc;
+/*@=nullstate@*/
}
- he->freeData = 0;
- (*he->p).ptr = NULL;
- *he->c = 0;
+ if (he->t)
+ *he->t = RPM_STRING_TYPE;
+ if (he->p) {
+ (*he->p).ptr = NULL;
+ he->freeData = 0;
+ }
+ if (he->c)
+ *he->c = 0;
return 1;
}
@@ -1083,32 +1114,34 @@
{
rpmTagType t;
char **d, **d2, *dp;
- int rc, i, l;
+ int_32 c;
+ int rc;
- rc = headerGetEntry(h, he->tag, &t, &d, he->c);
- if (!rc || d == NULL || *he->c == 0) {
+ rc = headerGetEntry(h, he->tag, &t, &d, &c);
+ if (!rc || d == NULL || c == 0) {
+ if (he->p)
+ (*he->p).ptr = NULL;
+ if (he->c)
+ *he->c = 0;
he->freeData = 0;
- (*he->p).ptr = NULL;
- *he->c = 0;
return 1;
}
- if (he->t)
- *he->t = t;
+
if (t == RPM_STRING_TYPE) {
d = (char **)xstrdup((char *)d);
d = (char **)xstrtolocale((char *)d);
he->freeData = 1;
} else if (t == RPM_STRING_ARRAY_TYPE) {
- l = 0;
- for (i = 0; i < *he->c; i++) {
+ int i, l = 0;
+ for (i = 0; i < c; i++) {
d[i] = xstrdup(d[i]);
d[i] = (char *)xstrtolocale(d[i]);
assert(d[i] != NULL);
l += strlen(d[i]) + 1;
}
- d2 = xmalloc(*he->c * sizeof(*d2) + l);
- dp = (char *)(d2 + *he->c);
- for (i = 0; i < *he->c; i++) {
+ d2 = xmalloc(c * sizeof(*d2) + l);
+ dp = (char *)(d2 + c);
+ for (i = 0; i < c; i++) {
d2[i] = dp;
strcpy(dp, d[i]);
dp += strlen(dp) + 1;
@@ -1119,7 +1152,13 @@
he->freeData = 1;
} else
he->freeData = 0;
- (*he->p).ptr = (void **)d;
+
+ if (he->t)
+ *he->t = t;
+ if (he->p)
+ (*he->p).ptr = (void **)d;
+ if (he->c)
+ *he->c = c;
return 0;
}
@@ -1192,14 +1231,17 @@
/*@modifies he, rpmGlobalMacroContext,
fileSystem, internalState @*/
{
- int_32 * valuep = xcalloc(1, sizeof(*valuep));
-
- *valuep = headerGetInstance(h);
-
- *he->t = RPM_INT32_TYPE;
- (*he->p).ptr = valuep;
- *he->c = 1;
- he->freeData = 1;
+ he->tag = RPMTAG_DBINSTANCE;
+ if (he->t)
+ *he->t = RPM_INT32_TYPE;
+ if (he->p) {
+ (*he->p).i32p = xcalloc(1, sizeof(*(*he->p).i32p));
+ (*he->p).i32p[0] = headerGetInstance(h);
+ he->freeData = 1;
+ } else
+ he->freeData = 0;
+ if (he->c)
+ *he->c = 1;
return 0;
}
@@ -1275,7 +1317,8 @@
* @retval *fcp number of files
*/
static void rpmfiBuildFNames(Header h, rpmTag tagN,
- /*@out@*/ const char *** fnp, /*@out@*/ int * fcp)
+ /*@null@*/ /*@out@*/ const char *** fnp,
+ /*@null@*/ /*@out@*/ int * fcp)
/*@modifies *fnp, *fcp @*/
{
const char ** baseNames;
@@ -1343,7 +1386,7 @@
/*@modifies he @*/
{
if (he->t) *he->t = RPM_STRING_ARRAY_TYPE;
- rpmfiBuildFNames(h, he->tag, (const char ***) he->p, he->c);
+ rpmfiBuildFNames(h, he->tag, (he->p ? &(*he->p).argv : NULL), he->c);
he->freeData = 1;
return 0;
}
@@ -1390,16 +1433,26 @@
{ .tagFunction = filepathsTag } },
{ HEADER_EXT_TAG, "RPMTAG_ORIGPATHS",
{ .tagFunction = origpathsTag } },
- { HEADER_EXT_FORMAT, "armor", { armorFormat } },
- { HEADER_EXT_FORMAT, "base64", { base64Format } },
- { HEADER_EXT_FORMAT, "depflags", { depflagsFormat } },
- { HEADER_EXT_FORMAT, "fflags", { fflagsFormat } },
- { HEADER_EXT_FORMAT, "perms", { permsFormat } },
- { HEADER_EXT_FORMAT, "permissions", { permsFormat } },
- { HEADER_EXT_FORMAT, "pgpsig", { pgpsigFormat } },
- { HEADER_EXT_FORMAT, "triggertype", { triggertypeFormat } },
- { HEADER_EXT_FORMAT, "xml", { xmlFormat } },
- { HEADER_EXT_FORMAT, "yaml", { yamlFormat } },
+ { HEADER_EXT_FORMAT, "armor",
+ { .formatFunction = armorFormat } },
+ { HEADER_EXT_FORMAT, "base64",
+ { .formatFunction = base64Format } },
+ { HEADER_EXT_FORMAT, "depflags",
+ { .formatFunction = depflagsFormat } },
+ { HEADER_EXT_FORMAT, "fflags",
+ { .formatFunction = fflagsFormat } },
+ { HEADER_EXT_FORMAT, "perms",
+ { .formatFunction = permsFormat } },
+ { HEADER_EXT_FORMAT, "permissions",
+ { .formatFunction = permsFormat } },
+ { HEADER_EXT_FORMAT, "pgpsig",
+ { .formatFunction = pgpsigFormat } },
+ { HEADER_EXT_FORMAT, "triggertype",
+ { .formatFunction = triggertypeFormat } },
+ { HEADER_EXT_FORMAT, "xml",
+ { .formatFunction = xmlFormat } },
+ { HEADER_EXT_FORMAT, "yaml",
+ { .formatFunction = yamlFormat } },
{ HEADER_EXT_MORE, NULL, { (void *) headerDefaultFormats } }
} ;
/*@=type@*/
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/header.c
============================================================================
$ cvs diff -u -r1.78 -r1.79 header.c
--- rpm/rpmdb/header.c 15 Oct 2007 16:19:01 -0000 1.78
+++ rpm/rpmdb/header.c 16 Oct 2007 00:48:14 -0000 1.79
@@ -1835,7 +1835,9 @@
memset(he, 0, sizeof(*he));
he->tag = tag;
he->t = &he_t;
+/*@-immediatetrans@*/
he->p = (p ? &he_p : NULL);
+/*@=immediatetrans@*/
he->c = &he_c;
/* Search extensions for specific tag override. */
@@ -3168,9 +3170,13 @@
HE_s he_s;
HE_t he = &he_s;
he->tag = 0;
+/*@-immediatetrans@*/
he->t = &ec->type;
+/*@-type@*/
he->p = &ec->data;
+/*@=type@*/
he->c = &ec->count;
+/*@=immediatetrans@*/
he->freeData = 0;
if (fn(hsa->h, he))
return 1;
@@ -3941,11 +3947,16 @@
/*@-type@*/ /* FIX: cast? */
const struct headerSprintfExtension_s headerDefaultFormats[] = {
- { HEADER_EXT_FORMAT, "octal", { octalFormat } },
- { HEADER_EXT_FORMAT, "hex", { hexFormat } },
- { HEADER_EXT_FORMAT, "date", { dateFormat } },
- { HEADER_EXT_FORMAT, "day", { dayFormat } },
- { HEADER_EXT_FORMAT, "shescape", { shescapeFormat } },
+ { HEADER_EXT_FORMAT, "octal",
+ { .formatFunction = octalFormat } },
+ { HEADER_EXT_FORMAT, "hex",
+ { .formatFunction = hexFormat } },
+ { HEADER_EXT_FORMAT, "date",
+ { .formatFunction = dateFormat } },
+ { HEADER_EXT_FORMAT, "day",
+ { .formatFunction = dayFormat } },
+ { HEADER_EXT_FORMAT, "shescape",
+ { .formatFunction = shescapeFormat } },
{ HEADER_EXT_LAST, NULL, { NULL } }
};
/*@=type@*/
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/rpmdb.c
============================================================================
$ cvs diff -u -r1.183 -r1.184 rpmdb.c
--- rpm/rpmdb/rpmdb.c 15 Oct 2007 07:02:27 -0000 1.183
+++ rpm/rpmdb/rpmdb.c 16 Oct 2007 00:48:14 -0000 1.184
@@ -1543,7 +1543,9 @@
} while (i < allMatches->count && offset == prevoff);
baseNames = _free(baseNames);
+/*@-usereleased@*/
dirNames = _free(dirNames);
+/*@=usereleased@*/
dirIndexes = _free(dirIndexes);
h = headerFree(h);
}
@@ -2926,29 +2928,29 @@
switch (he_t) {
case RPM_NULL_TYPE: /* XXX never occurs. */
assert(0);
- break;
+ /*@switchbreak@*/ break;
case RPM_CHAR_TYPE:
case RPM_INT8_TYPE:
key->size = sizeof(*he_p.i8p);
- key->data = he_p.i8p + i;
+/*@i@*/ key->data = he_p.i8p + i;
/*@switchbreak@*/ break;
case RPM_INT16_TYPE:
key->size = sizeof(*he_p.i16p);
- key->data = he_p.i16p + i;
+/*@i@*/ key->data = he_p.i16p + i;
/*@switchbreak@*/ break;
case RPM_INT32_TYPE:
key->size = sizeof(*he_p.i32p);
- key->data = he_p.i32p + i;
+/*@i@*/ key->data = he_p.i32p + i;
/*@switchbreak@*/ break;
case RPM_INT64_TYPE:
key->size = sizeof(*he_p.i64p);
- key->data = he_p.i64p + i;
+/*@i@*/ key->data = he_p.i64p + i;
/*@switchbreak@*/ break;
case RPM_OPENPGP_TYPE:
case RPM_ASN1_TYPE:
case RPM_BIN_TYPE:
key->size = he_c;
- key->data = he_p.ptr;
+/*@i@*/ key->data = he_p.ptr;
he_c = 1; /* XXX break out of loop. */
/*@switchbreak@*/ break;
case RPM_I18NSTRING_TYPE: /* XXX never occurs. */
@@ -3250,12 +3252,12 @@
if (db->db_tagn != NULL)
for (dbix = 0; dbix < db->db_ndbi; dbix++) {
byte * bin = NULL;
- int_32 * requireFlags;
+ hRET_t requireFlags;
rpmRC rpmrc;
int i, j;
rpmrc = RPMRC_NOTFOUND;
- requireFlags = NULL;
+ requireFlags.ptr = NULL;
dbi = NULL;
he->tag = db->db_tagn[dbix];
he_t = 0;
@@ -3387,7 +3389,8 @@
/*@switchbreak@*/ break;
case RPMTAG_REQUIRENAME:
/* Filter out install prerequisites. */
- if (requireFlags && isInstallPreReq(requireFlags[i]))
+ if (requireFlags.i32p
+ && isInstallPreReq(requireFlags.i32p[i]))
/*@innercontinue@*/ continue;
/*@switchbreak@*/ break;
case RPMTAG_TRIGGERNAME:
@@ -3409,7 +3412,7 @@
switch (he_t) {
case RPM_NULL_TYPE: /* XXX never occurs. */
assert(0);
- break;
+ /*@switchbreak@*/ break;
case RPM_CHAR_TYPE:
case RPM_INT8_TYPE:
key->size = sizeof(*he_p.i8p);
@@ -3542,7 +3545,7 @@
he_p.ptr = _free(he_p.ptr);
he_c = 0;
bin = _free(bin);
- requireFlags = _free(requireFlags);
+ requireFlags.ptr = _free(requireFlags.ptr);
}
rec = _free(rec);
@@ -3669,7 +3672,9 @@
fps = _free(fps);
fullBaseNames = _free(fullBaseNames);
+/*@-usereleased@*/
dirNames = _free(dirNames);
+/*@=usereleased@*/
fullDirIndexes = _free(fullDirIndexes);
baseNames = _free(baseNames);
dirIndexes = _free(dirIndexes);
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/sqlite.c
============================================================================
$ cvs diff -u -r1.16 -r1.17 sqlite.c
--- rpm/rpmdb/sqlite.c 11 Oct 2007 19:44:24 -0000 1.16
+++ rpm/rpmdb/sqlite.c 16 Oct 2007 00:48:14 -0000 1.17
@@ -96,10 +96,12 @@
int used;
};
+/*@-redef@*/
union _dbswap {
uint32_t ui;
unsigned char uc[4];
};
+/*@=redef@*/
#define _DBSWAP(_a) \
{ unsigned char _b, *_c = (_a).uc; \
@@ .
Received on Tue Oct 16 02:48:15 2007