[CVS] RPM: rpm-5_4: rpm/build/ pack.c
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: 12-Apr-2016 06:53:07 Branch: rpm-5_4 Handle: 2016041204530700 Modified files: (Branch: rpm-5_4) rpm/build pack.c Log: - adjust padding so that the metadata header is located at exactly 0x400. Summary: RevisionChanges Path 2.324.2.18 +1 -1 rpm/build/pack.c patch -p0 <<'@@ .' Index: rpm/build/pack.c $ cvs diff -u -r2.324.2.17 -r2.324.2.18 pack.c --- rpm/build/pack.c 2 Apr 2016 23:01:12 - 2.324.2.17 +++ rpm/build/pack.c 12 Apr 2016 04:53:07 - 2.324.2.18 @@ -926,7 +926,7 @@ {size_t slen = 0; void * uh = headerUnload(sigh, &slen); static const size_t align = 1024; - size_t nb = align - 96 - 16 - 16; + size_t nb = align - 96 - 16 - 8; rpmuint8_t * b; uh = _free(uh); @@ . __ RPM Package Managerhttp://rpm5.org CVS Sources Repositoryrpm-cvs@rpm5.org
[CVS] RPM: rpm-5_4: rpm/build/ parsePreamble.c
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: 12-Apr-2016 06:52:07 Branch: rpm-5_4 Handle: 2016041204520700 Modified files: (Branch: rpm-5_4) rpm/build parsePreamble.c Log: - permit packages without summary/description (except for PLD). Summary: RevisionChanges Path 2.194.2.14 +1 -1 rpm/build/parsePreamble.c patch -p0 <<'@@ .' Index: rpm/build/parsePreamble.c $ cvs diff -u -r2.194.2.13 -r2.194.2.14 parsePreamble.c --- rpm/build/parsePreamble.c 21 Mar 2016 22:08:52 - 2.194.2.13 +++ rpm/build/parsePreamble.c 12 Apr 2016 04:52:07 - 2.194.2.14 @@ -30,7 +30,7 @@ RPMTAG_DISTEPOCH, RPMTAG_LICENSE, RPMTAG_GROUP,/* XXX permissive. */ -#if !defined(SUPPORT_I18NSTRING_TYPE)/* XXX RPM_VENDOR_PLD */ +#if !defined(RPM_VENDOR_PLD) RPMTAG_SUMMARY, /* XXX permissive. */ RPMTAG_DESCRIPTION, /* XXX permissive. */ #endif @@ . __ RPM Package Managerhttp://rpm5.org CVS Sources Repositoryrpm-cvs@rpm5.org
[CVS] RPM: rpm-5_4: rpm/lib/ rpmgi.c
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: 12-Apr-2016 00:06:30 Branch: rpm-5_4 Handle: 2016041122063000 Modified files: (Branch: rpm-5_4) rpm/lib rpmgi.c Log: - improve debugging messages. Summary: RevisionChanges Path 2.75.2.14 +5 -3 rpm/lib/rpmgi.c patch -p0 <<'@@ .' Index: rpm/lib/rpmgi.c $ cvs diff -u -r2.75.2.13 -r2.75.2.14 rpmgi.c --- rpm/lib/rpmgi.c 11 Apr 2016 09:15:40 - 2.75.2.13 +++ rpm/lib/rpmgi.c 11 Apr 2016 22:06:30 - 2.75.2.14 @@ -245,12 +245,14 @@ if (rpmrc == RPMRC_OK) break; + if (gi->flags & RPMGI_NOMANIFEST) { /* XXX remap skipped -> failed reads */ if (rpmrc == RPMRC_NOTFOUND) gi->rc = rpmrc = RPMRC_FAIL; break; } + if (rpmrc == RPMRC_NOSIG) { /* XXX move error message to caller. */ rpmlog(RPMLOG_NOTICE, _("not signed: %s\n"), fn); @@ -460,7 +462,7 @@ gi->mi = rpmtsInitIterator(gi->ts, gi->tag, gi->keyp, gi->keylen); if (_rpmgi_debug < 0) -fprintf(stderr, "*** gi %p key %p[%d]\tmi %p\n", gi, gi->keyp, (int)gi->keylen, gi->mi); +fprintf(stderr, "*** %s: gi %p key %p[%d]\tmi %p\n", __FUNCTION__, gi, gi->keyp, (int)gi->keylen, gi->mi); if (gi->argv != NULL) for (av = (const char **) gi->argv; *av != NULL; av++) { @@ -756,11 +758,11 @@ case RPMDBI_ARGLIST: /* XXX gi->active initialize? */ if (_rpmgi_debug < 0) -fprintf(stderr, "*** gi %p\t%p[%d]: %s\n", gi, gi->argv, gi->i, gi->argv[gi->i]); +fprintf(stderr, "*** %s: gi %p\t%p[%d]: %s\n", __FUNCTION__, gi, gi->argv, gi->i, gi->argv[gi->i]); /* Read next header, lazily expanding manifests as found. */ rpmrc = rpmgiLoadReadHeader(gi); if (_rpmgi_debug < 0) -fprintf(stderr, "*** rc %d gi %p\t%p[%d]: h %p %s\n", rpmrc, gi, gi->argv, gi->i, gi->h, gi->argv[gi->i]); +fprintf(stderr, "*** %s: rc %d gi %p\t%p[%d]: h %p %s\n", __FUNCTION__, rpmrc, gi, gi->argv, gi->i, gi->h, gi->argv[gi->i]); /* XXX non-rpm, non-manifest, returns NOTFOUND with h == NULL */ /* Skip non-existent *.rpm and non-manifest files if more to do. */ if (rpmrc == RPMRC_NOTFOUND) { @@ . __ RPM Package Managerhttp://rpm5.org CVS Sources Repositoryrpm-cvs@rpm5.org
[CVS] RPM: rpm-5_4: rpm/rpmdb/ tagname.c
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: 12-Apr-2016 00:04:46 Branch: rpm-5_4 Handle: 2016041122044600 Modified files: (Branch: rpm-5_4) rpm/rpmdb tagname.c Log: - tagValidate: fix: skip validating RPM_I18NSTRING_TYPE tags. - tagValidate: fix: cannot do HE_t overrides here, damage is already done. Summary: RevisionChanges Path 1.34.2.15 +10 -26 rpm/rpmdb/tagname.c patch -p0 <<'@@ .' Index: rpm/rpmdb/tagname.c $ cvs diff -u -r1.34.2.14 -r1.34.2.15 tagname.c --- rpm/rpmdb/tagname.c 10 Apr 2016 22:03:54 - 1.34.2.14 +++ rpm/rpmdb/tagname.c 11 Apr 2016 22:04:46 - 1.34.2.15 @@ -522,34 +522,25 @@ if (flags & HEADERGET_SIGHEADER) return; -#if !defined(SUPPORT_I18NSTRING_TYPE) -/* XXX Re-map RPM_I18NSTRING_TYPE -> RPM_STRING_TYPE */ -/* XXX FIXME: move to headerVerifyInfo()? */ -if (he->t == RPM_I18NSTRING_TYPE) - he->t = RPM_STRING_TYPE; -#endif - /* XXX Arbitrary tags are always STRING or STRING_ARRAY. */ if (he->tag & 0x4000) { if (!(he->t == RPM_STRING_TYPE || he->t == RPM_STRING_ARRAY_TYPE)) { rpmTagType tagtype = RPM_STRING_TYPE; - char tagn[16]; - - (void) snprintf(tagn, sizeof(tagn), "0x%08x", he->tag); rpmlog(RPMLOG_WARNING, - _("tag %s(%u) type(0x%x) != expected type(0x%x), overriding type\n"), - tagn, (unsigned) he->tag, he->t, tagtype); - he->t = tagtype; - he->freeData = 0; /* XXX better a memory leak than a segfault */ + _("tag %s(%u) type(0x%x) != expected type(0x%x)\n"), + tagName(he->tag), (unsigned) he->tag, he->t, tagtype); } return; } switch (he->tag) { -#ifdef DYING /* XXX retrofitted in headerVerifyInfo() */ +#if defined(SUPPORT_I18NSTRING_TYPE) +case RPMTAG_SUMMARY: +case RPMTAG_DESCRIPTION: +case RPMTAG_GROUP: +#endif case RPMTAG_FILESTATES: /* XXX either CHAR or UINT8 */ break; -#endif case RPMTAG_PREINPROG: /* XXX either STRING or STRING_ARRAY */ case RPMTAG_POSTINPROG: /* XXX either STRING or STRING_ARRAY */ case RPMTAG_PREUNPROG: /* XXX either STRING or STRING_ARRAY */ @@ -557,25 +548,18 @@ case RPMTAG_VERIFYSCRIPTPROG:/* XXX either STRING or STRING_ARRAY */ if (!(he->t == RPM_STRING_TYPE || he->t == RPM_STRING_ARRAY_TYPE)) { rpmTagType tagtype = RPM_STRING_TYPE; - rpmlog(RPMLOG_WARNING, - _("tag %s(%u) type(0x%x) != expected type(0x%x), overriding type\n"), + _("tag %s(%u) type(0x%x) != expected type(0x%x)\n"), tagName(he->tag), (unsigned) he->tag, he->t, tagtype); - he->t = tagtype; - he->freeData = 0; /* XXX better a memory leak than a segfault */ } break; default: { rpmTagType tagtype = tagType(he->tag); rpmTagType type = (tagtype & 0x); - if (he->t != type) { + if (type && he->t != type) { rpmlog(RPMLOG_WARNING, - _("tag %s(%u) type(0x%x) != expected type(0x%x), overriding type\n"), + _("tag %s(%u) type(0x%x) != expected type(0x%x)\n"), tagName(he->tag), (unsigned) he->tag, he->t, tagtype); - he->t = type; - if (he->t == RPM_STRING_TYPE) - he->c = 1; - he->freeData = 0; /* XXX better a memory leak than a segfault */ } } break; } @@ . __ RPM Package Managerhttp://rpm5.org CVS Sources Repositoryrpm-cvs@rpm5.org
[CVS] RPM: rpm-5_4: rpm/rpmdb/ header_internal.c
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: 12-Apr-2016 00:02:11 Branch: rpm-5_4 Handle: 2016041122021100 Modified files: (Branch: rpm-5_4) rpm/rpmdb header_internal.c Log: - pubkeys: detect RPMTAG_PUBKEY type failures as early as possible. Summary: RevisionChanges Path 1.20.2.5+7 -1 rpm/rpmdb/header_internal.c patch -p0 <<'@@ .' Index: rpm/rpmdb/header_internal.c $ cvs diff -u -r1.20.2.4 -r1.20.2.5 header_internal.c --- rpm/rpmdb/header_internal.c 11 Apr 2016 09:12:33 - 1.20.2.4 +++ rpm/rpmdb/header_internal.c 11 Apr 2016 22:02:11 - 1.20.2.5 @@ -46,8 +46,14 @@ info->count = (rpmuint32_t) ntohl(pe[i].count); /* XXX Convert RPMTAG_FILESTATE to RPM_UINT8_TYPE. */ - if (info->tag == 1029 && info->type == 1) { + if (info->tag == 1029 && info->type == 1) info->type = RPM_UINT8_TYPE; + + /* XXX Ensure that pubkey type is sane, fail early if not.. */ + if (info->tag == RPMTAG_PUBKEYS + && info->type != RPM_STRING_ARRAY_TYPE) + { + return (int)i; } #ifdef NOTYET /* XXX more todo here */ @@ . __ RPM Package Managerhttp://rpm5.org CVS Sources Repositoryrpm-cvs@rpm5.org
[CVS] RPM: rpm-5_4: rpm/rpmdb/ header.c
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: 12-Apr-2016 00:00:58 Branch: rpm-5_4 Handle: 2016041122005200 Modified files: (Branch: rpm-5_4) rpm/rpmdb header.c Log: - header: deal with tag padding, detect STRING_ARRAY overruns/underruns. Summary: RevisionChanges Path 1.198.2.23 +16 -10 rpm/rpmdb/header.c patch -p0 <<'@@ .' Index: rpm/rpmdb/header.c $ cvs diff -u -r1.198.2.22 -r1.198.2.23 header.c --- rpm/rpmdb/header.c11 Apr 2016 09:18:28 - 1.198.2.22 +++ rpm/rpmdb/header.c11 Apr 2016 22:00:52 - 1.198.2.23 @@ -311,7 +311,7 @@ break; /* These are like RPM_STRING_TYPE, except they're *always* an array */ /* Compute sum of length of all strings, including nul terminators */ -case RPM_I18NSTRING_TYPE: +case RPM_I18NSTRING_TYPE:/* XXX treat as raw string array. */ case RPM_STRING_ARRAY_TYPE: if (onDisk) { while (count--) { @@ -418,8 +418,9 @@ nb = he->c * sizeof(*he->p.ui64p); break; #if !defined(SUPPORT_I18NSTRING_TYPE) -case RPM_I18NSTRING_TYPE: +case RPM_I18NSTRING_TYPE:/* XXX already done? */ he->t = RPM_STRING_TYPE; + he->c = 1; /*@fallthrough@*/ #endif case RPM_STRING_TYPE: @@ -1350,6 +1351,7 @@ */ static int copyEntry(const indexEntry entry, HE_t he, int minMem) { +rpmTagType type = entry->info.type; rpmTagCount count = entry->info.count; int rc = 1; /* XXX 1 on success. */ @@ -1397,7 +1399,8 @@ break; #if !defined(SUPPORT_I18NSTRING_TYPE) case RPM_I18NSTRING_TYPE: - he->t = RPM_STRING_TYPE; + type = RPM_STRING_TYPE; + count = 1; he->p.str = (char *) entry->data; break; #endif @@ -1426,21 +1429,27 @@ memcpy(t, entry->data, entry->length); t[entry->length-1] = '\0'; /* XXX ensure NUL terminated */ } - te = t + entry->length; + te = t + entry->length; /* XXX entry->length +padding */ for (i = 0; i < (unsigned) count; i++) { argv[i] = t; t = strchr(t, 0); t++; } - if (t != te)/* XXX ensure full copy */ + if (t > te) { +fprintf(stderr, "*** %s: STRING_ARRAY overrun\n", __FUNCTION__, rc, t, te); + rc = 0; + } else + if ((te-t) >= 8) { /* XXX entry->length +padding */ +fprintf(stderr, "*** %s: STRING_ARRAY underrun\n", __FUNCTION__, rc, t, te); rc = 0; + } }break; default: he->p.ptr = entry->data; break; } -he->t = entry->info.type; +he->t = type; he->c = count; return rc; } @@ -1613,7 +1622,6 @@ } /*@fallthrough@*/ #endif -case RPM_STRING_TYPE: default: rc = copyEntry(entry, he, minMem); break; @@ -1636,9 +1644,7 @@ int rc = 0; /* assume success */ switch (he->t) { -#if defined(SUPPORT_I18NSTRING_TYPE) /* XXX used while reloading? */ -case RPM_I18NSTRING_TYPE: -#endif +case RPM_I18NSTRING_TYPE:/* XXX used while reloading? */ case RPM_STRING_ARRAY_TYPE: {const char ** av = he->p.argv; rpmTagCount cnt = he->c; @@ . __ RPM Package Managerhttp://rpm5.org CVS Sources Repositoryrpm-cvs@rpm5.org
[CVS] RPM: rpm-5_4: rpm/rpmdb/ hdrNVR.c
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: 11-Apr-2016 23:57:37 Branch: rpm-5_4 Handle: 2016041121573700 Modified files: (Branch: rpm-5_4) rpm/rpmdb hdrNVR.c Log: - headerMergeLegacySigs: back out too strict assertions, rely on filtering. Summary: RevisionChanges Path 1.46.6.8+0 -7 rpm/rpmdb/hdrNVR.c patch -p0 <<'@@ .' Index: rpm/rpmdb/hdrNVR.c $ cvs diff -u -r1.46.6.7 -r1.46.6.8 hdrNVR.c --- rpm/rpmdb/hdrNVR.c10 Apr 2016 22:03:54 - 1.46.6.7 +++ rpm/rpmdb/hdrNVR.c11 Apr 2016 21:57:37 - 1.46.6.8 @@ -261,15 +261,12 @@ break; } if (!headerIsEntry(h, he->tag)) { -#ifdef DYING if (hdrchkType(he->t)) continue; if (hdrchkData(he->c)) continue; -#endif switch(he->t) { default: -assert(0); rpmlog(RPMLOG_ERR, _("%s: skipping tag: tag(%u) t(%u) data %p[%u]\n"), __FUNCTION__, xx, he->tag, he->t, he->p.ptr, he->c); @@ -279,23 +276,19 @@ case RPM_UINT16_TYPE: case RPM_UINT32_TYPE: case RPM_UINT64_TYPE: -assert(he->c == 1); if (he->c != 1) continue; break; case RPM_STRING_TYPE: -assert(he->c == 1); if (he->c != 1) continue; break; case RPM_BIN_TYPE: -assert(he->c < 16*1024); if (he->c >= 16*1024) continue; break; case RPM_I18NSTRING_TYPE: case RPM_STRING_ARRAY_TYPE: -assert(0); continue; break; } @@ . __ RPM Package Managerhttp://rpm5.org CVS Sources Repositoryrpm-cvs@rpm5.org
[CVS] RPM: rpm-5_4: rpm/ CHANGES rpm/rpmio/ rpmlog.c
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: 11-Apr-2016 20:44:18 Branch: rpm-5_4 Handle: 2016041118441800 Modified files: (Branch: rpm-5_4) rpm CHANGES rpm/rpmio rpmlog.c Log: - rpmlog: colorized spewage. Summary: RevisionChanges Path 1.3501.2.479+1 -0 rpm/CHANGES 2.46.4.7+96 -19 rpm/rpmio/rpmlog.c patch -p0 <<'@@ .' Index: rpm/CHANGES $ cvs diff -u -r1.3501.2.478 -r1.3501.2.479 CHANGES --- rpm/CHANGES 10 Apr 2016 22:03:53 - 1.3501.2.478 +++ rpm/CHANGES 11 Apr 2016 18:44:18 - 1.3501.2.479 @@ -1,4 +1,5 @@ 5.4.15 -> 5.4.16: +- jbj: rpmlog: colorized spewage. - jbj: header: stricter checks to survive "rpm -qp --nomanifest" fuzzing. - jbj: mongo: fix: add #include . - jbj: system.h: undef SUPPORT_I18NSTRING_TYPE, no RPM_I18NSTRING_TYPE. @@ . patch -p0 <<'@@ .' Index: rpm/rpmio/rpmlog.c $ cvs diff -u -r2.46.4.6 -r2.46.4.7 rpmlog.c --- rpm/rpmio/rpmlog.c27 Sep 2014 15:51:24 - 2.46.4.6 +++ rpm/rpmio/rpmlog.c11 Apr 2016 18:44:18 - 2.46.4.7 @@ -132,11 +132,69 @@ /*@unchecked@*/ /*@null@*/ static FILE * _stdlog = NULL; +/*@-readonlytrans@*/ /* FIX: double indirection. */ +/*@observer@*/ /*@unchecked@*/ +static const char *rpmlogMsgPrefix[] = { +N_("fatal error: "),/*!< RPMLOG_EMERG */ +N_("fatal error: "),/*!< RPMLOG_ALERT */ +N_("fatal error: "),/*!< RPMLOG_CRIT */ +N_("error: "), /*!< RPMLOG_ERR */ +N_("warning: "), /*!< RPMLOG_WARNING */ +"", /*!< RPMLOG_NOTICE */ +"", /*!< RPMLOG_INFO */ +"D: ", /*!< RPMLOG_DEBUG */ +}; + +#define ANSI_COLOR_BLACK "\x1b[30m" +#define ANSI_COLOR_RED "\x1b[31m" +#define ANSI_COLOR_GREEN "\x1b[32m" +#define ANSI_COLOR_YELLOW"\x1b[33m" +#define ANSI_COLOR_BLUE "\x1b[34m" +#define ANSI_COLOR_MAGENTA "\x1b[35m" +#define ANSI_COLOR_CYAN "\x1b[36m" +#define ANSI_COLOR_WHITE "\x1b[37m" + +#define ANSI_BRIGHT_BLACK"\x1b[30;1m" +#define ANSI_BRIGHT_RED "\x1b[31;1m" +#define ANSI_BRIGHT_GREEN"\x1b[32;1m" +#define ANSI_BRIGHT_YELLOW "\x1b[33;1m" +#define ANSI_BRIGHT_BLUE "\x1b[34;1m" +#define ANSI_BRIGHT_MAGENTA "\x1b[35;1m" +#define ANSI_BRIGHT_CYAN "\x1b[36;1m" +#define ANSI_BRIGHT_WHITE"\x1b[37;1m" + +#define ANSI_COLOR_RESET "\x1b[0m" + +static const char *rpmlogMsgPrefixColor[] = { +ANSI_BRIGHT_RED, /*!< RPMLOG_EMERG */ +ANSI_BRIGHT_RED, /*!< RPMLOG_ALERT */ +ANSI_BRIGHT_RED, /*!< RPMLOG_CRIT */ +ANSI_BRIGHT_RED, /*!< RPMLOG_ERR */ +ANSI_BRIGHT_MAGENTA,/*!< RPMLOG_WARNING */ +"", /*!< RPMLOG_NOTICE */ +"", /*!< RPMLOG_INFO */ +ANSI_BRIGHT_BLUE,/*!< RPMLOG_DEBUG */ +}; +/*@=readonlytrans@*/ + +const char * rpmlogLevelPrefix(rpmlogLvl pri) +{ +return rpmlogMsgPrefix[pri&0x7]; +} + +static const char * rpmlogLevelColor(rpmlogLvl pri) +{ +return rpmlogMsgPrefixColor[pri&0x7]; +} + static int rpmlogDefault(rpmlogRec rec) /*@globals fileSystem @*/ /*@modifies fileSystem @*/ { FILE *msgout = (_stdlog ? _stdlog : stderr); +const char * colorOn = isatty(fileno(msgout)) + ? rpmlogLevelColor(rec->pri) + : NULL ; switch (rec->pri) { case RPMLOG_INFO: @@ -149,14 +207,52 @@ case RPMLOG_ERR: case RPMLOG_WARNING: case RPMLOG_DEBUG: + if (colorOn && *colorOn) + (void) fputs(rpmlogLevelColor(rec->pri), msgout); + break; default: break; } (void) fputs(rpmlogLevelPrefix(rec->pri), msgout); +switch (rec->pri) { +case RPMLOG_INFO: +case RPMLOG_NOTICE: + break; +case RPMLOG_EMERG: +case RPMLOG_ALERT: +case RPMLOG_CRIT: +case RPMLOG_ERR: +case RPMLOG_WARNING: + if (colorOn && *colorOn) + (void) fputs(ANSI_COLOR_RESET, msgout); +case RPMLOG_DEBUG: +default: + break; +} + if (rec->message) (void) fputs(rec->message, msgout); + +switch (rec->pri) { +case RPMLOG_INFO: +case RPMLOG_NOTICE: + break; +
[CVS] RPM: rpm-5_4: rpm/tests/ rpm.suppress
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: 11-Apr-2016 11:21:19 Branch: rpm-5_4 Handle: 2016041109211900 Modified files: (Branch: rpm-5_4) rpm/tests rpm.suppress Log: - mask a glibc leak. Summary: RevisionChanges Path 1.1.2.5 +1 -0 rpm/tests/rpm.suppress patch -p0 <<'@@ .' Index: rpm/tests/rpm.suppress $ cvs diff -u -r1.1.2.4 -r1.1.2.5 rpm.suppress --- rpm/tests/rpm.suppress24 Feb 2015 20:26:04 - 1.1.2.4 +++ rpm/tests/rpm.suppress11 Apr 2016 09:21:19 - 1.1.2.5 @@ -1,5 +1,6 @@ # --- glibc leak:__GI___strdup +leak:__GI___strndup # --- popt leak:expandNextArg @@ . __ RPM Package Managerhttp://rpm5.org CVS Sources Repositoryrpm-cvs@rpm5.org
[CVS] RPM: rpm-5_4: rpm/rpmdb/ header.c
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: 11-Apr-2016 11:18:28 Branch: rpm-5_4 Handle: 2016041109182800 Modified files: (Branch: rpm-5_4) rpm/rpmdb header.c Log: - header: fix: check that STRING_ARRAY has the right number of NUL's in blob. - header: fix: ensure STRING_ARRAY data is NUL terminated. Summary: RevisionChanges Path 1.198.2.22 +5 -0 rpm/rpmdb/header.c patch -p0 <<'@@ .' Index: rpm/rpmdb/header.c $ cvs diff -u -r1.198.2.21 -r1.198.2.22 header.c --- rpm/rpmdb/header.c10 Apr 2016 22:03:54 - 1.198.2.21 +++ rpm/rpmdb/header.c11 Apr 2016 09:18:28 - 1.198.2.22 @@ -1414,6 +1414,7 @@ {const char ** argv; size_t nb = count * sizeof(*argv); char * t; + char * te; unsigned i; if (minMem) { @@ -1423,12 +1424,16 @@ he->p.argv = argv = (const char **) DRD_xmalloc(nb + entry->length); t = (char *) &argv[count]; memcpy(t, entry->data, entry->length); + t[entry->length-1] = '\0'; /* XXX ensure NUL terminated */ } + te = t + entry->length; for (i = 0; i < (unsigned) count; i++) { argv[i] = t; t = strchr(t, 0); t++; } + if (t != te)/* XXX ensure full copy */ + rc = 0; }break; default: @@ . __ RPM Package Managerhttp://rpm5.org CVS Sources Repositoryrpm-cvs@rpm5.org
[CVS] RPM: rpm-5_4: rpm/lib/ rpmgi.c
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: 11-Apr-2016 11:15:40 Branch: rpm-5_4 Handle: 2016041109154000 Modified files: (Branch: rpm-5_4) rpm/lib rpmgi.c Log: - rpmgi: fix: resurrect immediate RPMRC_FAIL and exit code with --nomanifest. Summary: RevisionChanges Path 2.75.2.13 +7 -1 rpm/lib/rpmgi.c patch -p0 <<'@@ .' Index: rpm/lib/rpmgi.c $ cvs diff -u -r2.75.2.12 -r2.75.2.13 rpmgi.c --- rpm/lib/rpmgi.c 10 Apr 2016 22:32:27 - 2.75.2.12 +++ rpm/lib/rpmgi.c 11 Apr 2016 09:15:40 - 2.75.2.13 @@ -243,8 +243,14 @@ } else rpmrc = RPMRC_OK; - if (rpmrc == RPMRC_OK || gi->flags & RPMGI_NOMANIFEST) + if (rpmrc == RPMRC_OK) + break; + if (gi->flags & RPMGI_NOMANIFEST) { + /* XXX remap skipped -> failed reads */ + if (rpmrc == RPMRC_NOTFOUND) + gi->rc = rpmrc = RPMRC_FAIL; break; + } if (rpmrc == RPMRC_NOSIG) { /* XXX move error message to caller. */ rpmlog(RPMLOG_NOTICE, _("not signed: %s\n"), fn); @@ . __ RPM Package Managerhttp://rpm5.org CVS Sources Repositoryrpm-cvs@rpm5.org
[CVS] RPM: rpm-5_4: rpm/rpmdb/ pkgio.c
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: 11-Apr-2016 11:13:28 Branch: rpm-5_4 Handle: 2016041109132800 Modified files: (Branch: rpm-5_4) rpm/rpmdb pkgio.c Log: - header: fix: ensure il/dl are greater than zero. Summary: RevisionChanges Path 1.121.2.21 +13 -5 rpm/rpmdb/pkgio.c patch -p0 <<'@@ .' Index: rpm/rpmdb/pkgio.c $ cvs diff -u -r1.121.2.20 -r1.121.2.21 pkgio.c --- rpm/rpmdb/pkgio.c 11 Apr 2016 07:00:16 - 1.121.2.20 +++ rpm/rpmdb/pkgio.c 11 Apr 2016 09:13:28 - 1.121.2.21 @@ -1072,7 +1072,6 @@ const void * sig = NULL; rpmVSFlags vsflags = pgpDigVSFlags; size_t siglen = 0; -int blen; rpmuint32_t ril = 0; const unsigned char * regionEnd = NULL; rpmRC rc = RPMRC_FAIL; /* assume failure */ @@ -1104,7 +1103,11 @@ /* Is there an immutable header region tag? */ if (entry->info.tag != RPMTAG_HEADERIMMUTABLE) { - rc = RPMRC_NOTFOUND; + if (entry->info.tag < RPMTAG_HEADERI18NTABLE) { + (void) snprintf(buf, sizeof(buf), + _("region tag: BAD, %s"), entryInfoStr(&entry->info)); + } else + rc = RPMRC_NOTFOUND; goto exit; } @@ -1163,6 +1166,7 @@ switch (entry->info.tag) { case RPMTAG_SHA1HEADER: { const unsigned char * b; + int blen; if (vsflags & RPMVSF_NOSHA1HEADER) break; if (entry->info.type != RPM_STRING_TYPE || entry->info.count != 1) @@ -1478,12 +1482,15 @@ (void) headerGetMagic(NULL, &b, &nb); if (memcmp(block, b, nb)) { unsigned char * x = (unsigned char *) block; - (void) snprintf(buf, sizeof(buf), _("hdr magic: BAD, read %02x%02x%02x%02x%02x%02x%02x%02x"), x[0], x[1], x[2], x[3], x[4], x[5], x[6], x[7]); + (void) snprintf(buf, sizeof(buf), + _("hdr magic: BAD, read %02x%02x%02x%02x%02x%02x%02x%02x"), + x[0], x[1], x[2], x[3], x[4], x[5], x[6], x[7]); goto exit; } il = (rpmuint32_t)ntohl(block[2]); -if ((il * sizeof(struct entryInfo_s)) > (st->st_size - startoff - sizeof(block)) +if (il < 1 + || (il * sizeof(struct entryInfo_s)) > (st->st_size - startoff - sizeof(block)) || hdrchkTags(il)) { (void) snprintf(buf, sizeof(buf), @@ -1493,7 +1500,8 @@ goto exit; } dl = (rpmuint32_t)ntohl(block[3]); -if (dl > (st->st_size - startoff - sizeof(block)) +if (dl < 1 + || dl > (st->st_size - startoff - sizeof(block)) || hdrchkData(dl)) { (void) snprintf(buf, sizeof(buf), @@ . __ RPM Package Managerhttp://rpm5.org CVS Sources Repositoryrpm-cvs@rpm5.org
[CVS] RPM: rpm-5_4: rpm/rpmdb/ header_internal.c package.c
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: 11-Apr-2016 11:12:34 Branch: rpm-5_4 Handle: 2016041109123300 Modified files: (Branch: rpm-5_4) rpm/rpmdb header_internal.c package.c Log: - fix: avoid argv underruns; Summary: RevisionChanges Path 1.20.2.4+1 -5 rpm/rpmdb/header_internal.c 1.2.2.13+1 -1 rpm/rpmdb/package.c patch -p0 <<'@@ .' Index: rpm/rpmdb/header_internal.c $ cvs diff -u -r1.20.2.3 -r1.20.2.4 header_internal.c --- rpm/rpmdb/header_internal.c 10 Apr 2016 22:03:54 - 1.20.2.3 +++ rpm/rpmdb/header_internal.c 11 Apr 2016 09:12:33 - 1.20.2.4 @@ -1,4 +1,3 @@ -/*@-sizeoftype@*/ /** \ingroup header * \file rpmdb/header_internal.c */ @@ -13,7 +12,6 @@ /** * Alignment needs (and sizeof scalars types) for internal rpm data types. */ -/*@observer@*/ /*@unchecked@*/ int rpm_typeAlign[16] = { 1, /*!< RPM_NULL_TYPE */ 1, /*!< RPM_CHAR_TYPE */ @@ -35,9 +33,7 @@ int headerVerifyInfo(rpmuint32_t il, rpmuint32_t dl, const void * pev, void * iv, int negate) { -/*@-castexpose@*/ entryInfo pe = (entryInfo) pev; -/*@=castexpose@*/ entryInfo info = (entryInfo) iv; rpmuint32_t i; rpmTag ptag = 0; @@ -68,6 +64,7 @@ info->offset = -info->offset; if (i > 0 && ptag > info->tag) { + /* Heuristic to determine whether this or previous tag was fubar. */ if (ptag > RPMTAG_FIRSTFREE_TAG) { i--; info->tag = (rpmTag) ntohl(pe[i].tag); @@ -108,4 +105,3 @@ } return -1; } -/*@=sizeoftype@*/ @@ . patch -p0 <<'@@ .' Index: rpm/rpmdb/package.c $ cvs diff -u -r1.2.2.12 -r1.2.2.13 package.c --- rpm/rpmdb/package.c 10 Apr 2016 22:03:54 - 1.2.2.12 +++ rpm/rpmdb/package.c 11 Apr 2016 09:12:33 - 1.2.2.13 @@ -243,7 +243,7 @@ default: break; case RPM_STRING_ARRAY_TYPE: - ix = he->c - 1; /* XXX FIXME: assumes last pubkey */ + ix = (he->c > 1 ? he->c - 1 : 0); /* XXX FIXME: assumes last pubkey */ dig->pub = _free(dig->pub); dig->publen = 0; { rpmiob iob = rpmiobNew(0); @@ . __ RPM Package Managerhttp://rpm5.org CVS Sources Repositoryrpm-cvs@rpm5.org
[CVS] RPM: rpm-5_4: rpm/rpmdb/ pkgio.c
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: 11-Apr-2016 09:00:16 Branch: rpm-5_4 Handle: 2016041107001600 Modified files: (Branch: rpm-5_4) rpm/rpmdb pkgio.c Log: - pkgio: remove splint annotations, consolidate xar handling code. Summary: RevisionChanges Path 1.121.2.20 +63 -141rpm/rpmdb/pkgio.c patch -p0 <<'@@ .' Index: rpm/rpmdb/pkgio.c $ cvs diff -u -r1.121.2.19 -r1.121.2.20 pkgio.c --- rpm/rpmdb/pkgio.c 10 Apr 2016 22:03:54 - 1.121.2.19 +++ rpm/rpmdb/pkgio.c 11 Apr 2016 07:00:16 - 1.121.2.20 @@ -35,33 +35,18 @@ #include "signature.h" #include "debug.h" -/*@access rpmts @*/ -/*@access rpmxar @*/ -/*@access pgpDig @*/ -/*@access pgpDigParams @*/ -/*@access Header @*//* XXX compared with NULL */ -/*@access entryInfo @*/ -/*@access indexEntry @*/ -/*@access FD_t @*/ /* XXX stealing digests */ -/*@access FDSTAT_t @*/ /* XXX stealing digests */ - #ifdef __cplusplus GENfree(struct rpmlead *) GENfree(rpmuint8_t **) GENfree(rpmuint32_t *) #endif /* __cplusplus */ -/*@unchecked@*/ int _pkgio_debug = 0; /** */ -/*@-exportheader@*/ -/*@unused@*/ ssize_t timedRead(FD_t fd, /*@out@*/ void * bufptr, size_t length) - /*@globals fileSystem @*/ - /*@modifies fd, *bufptr, fileSystem @*/; +ssize_t timedRead(FD_t fd, /*@out@*/ void * bufptr, size_t length); #define timedRead (ufdio->read) -/*@=exportheader@*/ /*===*/ /** \ingroup header @@ -73,8 +58,6 @@ */ static rpmRC rpmWriteHeader(FD_t fd, /*@null@*/ Header h, /*@null@*/ const char ** msg) - /*@globals fileSystem, internalState @*/ - /*@modifies fd, h, *msg, fileSystem, internalState @*/ { const void * uh = NULL; size_t nb; @@ -111,9 +94,7 @@ } } -/*@-sizeoftype@*/ nb = Fwrite(uh, sizeof(char), length, fd); -/*@=sizeoftype@*/ if (nb != length || Ferror(fd)) { if (msg) *msg = (nb > 0 @@ -136,16 +117,12 @@ if (ts != NULL && (int)opx >= 0 && (int)opx < RPMTS_OP_MAX) op = ts->ops + opx; -/*@-usereleased -compdef @*/ return op; -/*@=usereleased =compdef @*/ } pgpDigParams rpmtsPubkey(const rpmts ts) { -/*@-onlytrans@*/ return pgpGetPubkey(rpmtsDig(ts)); -/*@=onlytrans@*/ } rpmdb rpmtsGetRdb(rpmts ts) @@ -154,9 +131,7 @@ if (ts != NULL) { rdb = ts->rdb; } -/*@-compdef -refcounttrans -usereleased @*/ return rdb; -/*@=compdef =refcounttrans =usereleased @*/ } rpmRC rpmtsFindPubkey(rpmts ts, void * _dig) @@ -181,9 +156,7 @@ assert(dig != NULL); assert(sigp != NULL); assert(pubp != NULL); -/*@-sefparams@*/ assert(rpmtsDig(ts) == dig); -/*@=sefparams@*/ if (ts->hkp == NULL) ts->hkp = rpmhkpNew(NULL, 0); hkp = rpmhkpLink(ts->hkp); @@ -254,9 +227,7 @@ /* Retrieve the pubkey that matches the signature. */ he->tag = RPMTAG_PUBKEYS; -/*@-nullstate@*/ mi = rpmmiInit(rpmtsGetRdb(ts), RPMTAG_PUBKEYS, sigp->signid, sizeof(sigp->signid)); -/*@=nullstate@*/ while ((h = rpmmiNext(mi)) != NULL) { if (!headerGet(h, he, 0)) continue; @@ -433,24 +404,16 @@ if (_rpmhkp_debug) fprintf(stderr, "<-- %s(%p,%p) res %d\n", __FUNCTION__, ts, _dig, res); -/*@-nullstate@*/ return res; -/*@=nullstate@*/ } pgpDig rpmtsDig(rpmts ts) { -/*@-mods@*/ /* FIX: hide lazy malloc for now */ if (ts->dig == NULL) { ts->dig = pgpDigNew(RPMVSF_DEFAULT, (pgpPubkeyAlgo)0); -/*@-refcounttrans@*/ (void) pgpSetFindPubkey(ts->dig, (int (*)(void *, void *))rpmtsFindPubkey, ts); -/*@=refcounttrans@*/ } -/*@=mods@*/ -/*@-compdef -retexpose -usereleased@*/ return ts->dig; -/*@=compdef =retexpose =usereleased@*/ } void rpmtsCleanDig(rpmts ts) @@ -461,10 +424,8 @@ (void) rpmswAdd(rpmtsOp(ts, opx), (rpmop)pgpStatsAccumulator(ts->dig, opx)); opx = RPMTS_OP_SIGNATURE; (void) rpmswAdd(rpmtsOp(ts, opx), (rpmop)pgpStatsAccumulator(ts->dig, opx)); -/*@-onlytrans@*/ (void) pgpDigFree(ts->dig); ts->dig = NULL; /* XXX make sure the ptr is __REALLY__ gone */ -/*@=onlytrans@*/ } } @@ -485,16 +446,12 @@ char nam