RPM Package Manager, CVS Repository http://rpm5.org/cvs/ ____________________________________________________________________________
Server: rpm5.org Name: Jeff Johnson Root: /v/rpm/cvs Email: j...@rpm5.org Module: rpm Date: 26-Jan-2010 16:06:13 Branch: HEAD Handle: 2010012615061201 Modified files: rpm CHANGES rpm/js rpmbf-js.c rpm/lib depends.c rpm/rpmdb db3.c rpmdb.c rpm/rpmio rpmbf.c rpmbf.h Log: - rpmbf: fix: return -1 error on NULL pointers. Summary: Revision Changes Path 1.3258 +1 -0 rpm/CHANGES 1.10 +7 -5 rpm/js/rpmbf-js.c 1.455 +1 -1 rpm/lib/depends.c 1.146 +1 -1 rpm/rpmdb/db3.c 1.379 +9 -4 rpm/rpmdb/rpmdb.c 2.8 +31 -8 rpm/rpmio/rpmbf.c 2.7 +6 -7 rpm/rpmio/rpmbf.h ____________________________________________________________________________ patch -p0 <<'@@ .' Index: rpm/CHANGES ============================================================================ $ cvs diff -u -r1.3257 -r1.3258 CHANGES --- rpm/CHANGES 18 Jan 2010 23:59:42 -0000 1.3257 +++ rpm/CHANGES 26 Jan 2010 15:06:12 -0000 1.3258 @@ -1,5 +1,6 @@ 5.2b1 -> 5.3a1 + - jbj: rpmbf: fix: return -1 error on NULL pointers. - jbj: gpsee: finish refactoring gsr -> rpmjs.c. - jbj: gpsee: more refactoring gsr -> rpmjs.c. - jbj: poptIO: add _rpmio_posix_context_flags before adding arg everywhere. @@ . patch -p0 <<'@@ .' Index: rpm/js/rpmbf-js.c ============================================================================ $ cvs diff -u -r1.9 -r1.10 rpmbf-js.c --- rpm/js/rpmbf-js.c 10 Jan 2010 18:29:12 -0000 1.9 +++ rpm/js/rpmbf-js.c 26 Jan 2010 15:06:12 -0000 1.10 @@ -29,11 +29,11 @@ _METHOD_DEBUG_ENTRY(_debug); + *rval = JSVAL_FALSE; if (!(ok = JS_ConvertArguments(cx, argc, argv, "s", &_s))) goto exit; - (void) rpmbfAdd(bf, _s, 0); - *rval = JSVAL_TRUE; /* XXX return s? */ + *rval = (rpmbfAdd(bf, _s, 0) == 0 ? JSVAL_TRUE : JSVAL_FALSE); ok = JS_TRUE; exit: return ok; @@ -49,10 +49,11 @@ _METHOD_DEBUG_ENTRY(_debug); + *rval = JSVAL_FALSE; if (!(ok = JS_ConvertArguments(cx, argc, argv, "s", &_s))) goto exit; - *rval = (rpmbfChk(bf, _s, 0) ? JSVAL_TRUE : JSVAL_FALSE); + *rval = (rpmbfChk(bf, _s, 0) > 0 ? JSVAL_TRUE : JSVAL_FALSE); ok = JS_TRUE; exit: return ok; @@ -67,7 +68,7 @@ _METHOD_DEBUG_ENTRY(_debug); - *rval = (rpmbfClr(bf) ? JSVAL_FALSE : JSVAL_TRUE); + *rval = (rpmbfClr(bf) == 0 ? JSVAL_TRUE : JSVAL_FALSE); ok = JS_TRUE; return ok; } @@ -82,10 +83,11 @@ _METHOD_DEBUG_ENTRY(_debug); + *rval = JSVAL_FALSE; if (!(ok = JS_ConvertArguments(cx, argc, argv, "s", &_s))) goto exit; - *rval = (rpmbfDel(bf, _s, 0) ? JSVAL_FALSE : JSVAL_TRUE); + *rval = (rpmbfDel(bf, _s, 0) == 0 ? JSVAL_TRUE : JSVAL_FALSE); ok = JS_TRUE; exit: return ok; @@ . patch -p0 <<'@@ .' Index: rpm/lib/depends.c ============================================================================ $ cvs diff -u -r1.454 -r1.455 depends.c --- rpm/lib/depends.c 17 Dec 2009 04:00:13 -0000 1.454 +++ rpm/lib/depends.c 26 Jan 2010 15:06:12 -0000 1.455 @@ -2146,7 +2146,7 @@ if (*N == '/') { rpmfi fi = rpmteFI(p, RPMTAG_BASENAMES); rpmbf bf = rpmfiBloomFN(fi); - if (rpmbfChk(bf, N, strlen(N))) + if (rpmbfChk(bf, N, strlen(N)) > 0) return 0; } @@ . patch -p0 <<'@@ .' Index: rpm/rpmdb/db3.c ============================================================================ $ cvs diff -u -r1.145 -r1.146 db3.c --- rpm/rpmdb/db3.c 2 Jan 2010 01:19:46 -0000 1.145 +++ rpm/rpmdb/db3.c 26 Jan 2010 15:06:13 -0000 1.146 @@ -1923,7 +1923,7 @@ continue; /* Don't add identical (key,val) item to secondary. */ - if (rpmbfChk(bf, s, ns)) + if (rpmbfChk(bf, s, ns) > 0) continue; (void) rpmbfAdd(bf, s, ns); @@ . patch -p0 <<'@@ .' Index: rpm/rpmdb/rpmdb.c ============================================================================ $ cvs diff -u -r1.378 -r1.379 rpmdb.c --- rpm/rpmdb/rpmdb.c 4 Jan 2010 13:29:16 -0000 1.378 +++ rpm/rpmdb/rpmdb.c 26 Jan 2010 15:06:13 -0000 1.379 @@ -1341,6 +1341,8 @@ av = argvFree(av); b = _free(b); mire = mireFree(mire); +if (_rpmmi_debug || dbi->dbi_debug) +fprintf(stderr, "<-- %s(%p, %s(%u), %d, %p, %p, %p) rc %d %p[%u]\n", __FUNCTION__, db, tagName(tag), (unsigned)tag, mode, pat, matches, argvp, ret, (matches ? (*matches)->recs : NULL), (matches ? (*matches)->count : 0)); return ret; } @@ -1604,7 +1606,10 @@ uint32_t rpmmiInstance(rpmmi mi) { /* Get a native endian copy of the primary package key. */ - return _ntoh_ui(mi ? mi->mi_offset : 0); + uint32_t rc = _ntoh_ui(mi ? mi->mi_offset : 0); +if (_rpmmi_debug) +fprintf(stderr, "<-- %s(%p) rc %u\n", __FUNCTION__, mi, (unsigned)rc); + return rc; } unsigned int rpmmiCount(rpmmi mi) { @@ -2147,7 +2152,7 @@ /* Should this header be skipped? */ if (mi->mi_bf != NULL - && rpmbfChk(mi->mi_bf, &mi->mi_offset, sizeof(mi->mi_offset))) + && rpmbfChk(mi->mi_bf, &mi->mi_offset, sizeof(mi->mi_offset)) > 0) goto next; /* Fetch header by offset. */ @@ -2197,7 +2202,7 @@ /* Should this header be skipped? */ if (mi->mi_set == NULL && mi->mi_bf != NULL - && rpmbfChk(mi->mi_bf, &mi->mi_offset, sizeof(mi->mi_offset))) + && rpmbfChk(mi->mi_bf, &mi->mi_offset, sizeof(mi->mi_offset)) > 0) goto next; uh = v.data; @@ -2373,7 +2378,7 @@ (void)rpmioLinkPoolItem((rpmioItem)mi, __FUNCTION__, __FILE__, __LINE__); if (_rpmmi_debug || (dbi && dbi->dbi_debug)) -fprintf(stderr, "--> %s(%p, %s, %p[%u]=\"%s\") dbi %p mi %p\n", __FUNCTION__, db, tagName(tag), keyp, (unsigned)keylen, (keylen == 0 ? (const char *)keyp : "???"), dbi, mi); +fprintf(stderr, "--> %s(%p, %s, %p[%u]=\"%s\") dbi %p mi %p\n", __FUNCTION__, db, tagName(tag), keyp, (unsigned)keylen, (keylen == 0 || ((const char *)keyp)[keylen] == '\0' ? (const char *)keyp : "???"), dbi, mi); /* Chain cursors for teardown on abnormal exit. */ mi->mi_next = rpmmiRock; @@ . patch -p0 <<'@@ .' Index: rpm/rpmio/rpmbf.c ============================================================================ $ cvs diff -u -r2.7 -r2.8 rpmbf.c --- rpm/rpmio/rpmbf.c 17 Dec 2009 03:48:37 -0000 2.7 +++ rpm/rpmio/rpmbf.c 26 Jan 2010 15:06:13 -0000 2.8 @@ -71,6 +71,8 @@ rpmuint32_t h0 = 0; rpmuint32_t h1 = 0; + if (bf == NULL) return -1; + if (ns == 0) ns = strlen(s); jlu32lpair(s, ns, &h0, &h1); @@ -92,6 +94,8 @@ rpmuint32_t h1 = 0; int rc = 1; + if (bf == NULL) return -1; + if (ns == 0) ns = strlen(s); jlu32lpair(s, ns, &h0, &h1); @@ -110,9 +114,14 @@ int rpmbfClr(rpmbf bf) { - __pbm_bits * bits = __PBM_BITS(bf); static size_t nbw = (__PBM_NBITS/8); - size_t nw = (__PBM_IX(bf->m-1) + 1); + __pbm_bits * bits; + size_t nw; + + if (bf == NULL) return -1; + + bits = __PBM_BITS(bf); + nw = (__PBM_IX(bf->m-1) + 1); memset(bits, 0, nw * nbw); bf->n = 0; if (_rpmbf_debug) @@ -126,6 +135,8 @@ rpmuint32_t h0 = 0; rpmuint32_t h1 = 0; + if (bf == NULL) return -1; + if (ns == 0) ns = strlen(s); assert(ns > 0); jlu32lpair(s, ns, &h0, &h1); @@ -144,11 +155,17 @@ int rpmbfIntersect(rpmbf a, const rpmbf b) { - __pbm_bits * abits = __PBM_BITS(a); - __pbm_bits * bbits = __PBM_BITS(b); - size_t nw = (__PBM_IX(a->m-1) + 1); + __pbm_bits * abits; + __pbm_bits * bbits; + size_t nw; size_t i; + if (a == NULL || b == NULL) return -1; + + abits = __PBM_BITS(a); + bbits = __PBM_BITS(b); + nw = (__PBM_IX(a->m-1) + 1); + if (!(a->m == b->m && a->k == b->k)) return -1; for (i = 0; i < nw; i++) @@ -161,11 +178,17 @@ int rpmbfUnion(rpmbf a, const rpmbf b) { - __pbm_bits * abits = __PBM_BITS(a); - __pbm_bits * bbits = __PBM_BITS(b); - size_t nw = (__PBM_IX(a->m-1) + 1); + __pbm_bits * abits; + __pbm_bits * bbits; + size_t nw; size_t i; + if (a == NULL || b == NULL) return -1; + + abits = __PBM_BITS(a); + bbits = __PBM_BITS(b); + nw = (__PBM_IX(a->m-1) + 1); + if (!(a->m == b->m && a->k == b->k)) return -1; for (i = 0; i < nw; i++) @@ . patch -p0 <<'@@ .' Index: rpm/rpmio/rpmbf.h ============================================================================ $ cvs diff -u -r2.6 -r2.7 rpmbf.h --- rpm/rpmio/rpmbf.h 17 Dec 2009 03:48:37 -0000 2.6 +++ rpm/rpmio/rpmbf.h 26 Jan 2010 15:06:13 -0000 2.7 @@ -134,7 +134,7 @@ * @param bf Bloom filter * @param *_s bytes * @param ns no. bytes (0 uses strlen) - * @return 0 always + * @return 0 on success, -1 on NULL pointer */ int rpmbfAdd(rpmbf bf, const void * _s, size_t ns) /*...@modifies bf @*/; @@ -142,7 +142,7 @@ /** * Clear a Bloom filter, discarding all set memberships. * @param bf Bloom filter - * @return 0 always + * @return 0 on success, -1 on NULL pointer */ int rpmbfClr(rpmbf bf) /*...@modifies bf @*/; @@ -152,7 +152,7 @@ * @param bf Bloom filter * @param *_s bytes * @param ns no. bytes (0 uses strlen) - * @return 1 if string is present, 0 if not + * @return 1 if string is present, 0 if not, -1 on NULL pointer */ int rpmbfChk(rpmbf bf, const void * _s, size_t ns) /*...@modifies bf @*/; @@ -163,7 +163,7 @@ * @param bf Bloom filter * @param *_s bytes * @param ns no. bytes (0 will do strlen) - * @return 0 always + * @return 0 on success, -1 on NULL pointer */ int rpmbfDel(rpmbf bf, const void * _s, size_t ns) /*...@modifies bf @*/; @@ -172,7 +172,7 @@ * Return intersection of two Bloom filters. * @retval a Bloom filter * @param b Bloom filter - * @return 0 on success, -1 if {m,k} disagree. + * @return 0 on success, -1 if {m,k} disagree or NULL pointers. */ int rpmbfIntersect(rpmbf a, const rpmbf b) /*...@modifies a @*/; @@ -181,7 +181,7 @@ * Return union of two Bloom filters. * @retval a Bloom filter * @param b Bloom filter - * @return 0 on success, -1 if {m,k} disagree. + * @return 0 on success, -1 if {m,k} disagree or NULL pointers. */ int rpmbfUnion(rpmbf a, const rpmbf b) /*...@modifies a @*/; @@ -192,7 +192,6 @@ * @param e probability of error * @retval *mp no. of bits * @retval *kp no. of hashes - * @return 0 on success, -1 if {m,k} disagree. */ void rpmbfParams(size_t n, double e, size_t * mp, size_t * kp) /*...@modifies *mp, *kp @*/; @@ . ______________________________________________________________________ RPM Package Manager http://rpm5.org CVS Sources Repository rpm-cvs@rpm5.org