[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: 06-May-2016 00:20:16 Branch: rpm-5_4 Handle: 2016050522201600 Modified files: (Branch: rpm-5_4) rpm/rpmdb tagname.c Log: - fix: hotwire le32toh() on __APPLE__ Summary: RevisionChanges Path 1.34.2.16 +5 -0 rpm/rpmdb/tagname.c patch -p0 <<'@@ .' Index: rpm/rpmdb/tagname.c $ cvs diff -u -r1.34.2.15 -r1.34.2.16 tagname.c --- rpm/rpmdb/tagname.c 11 Apr 2016 22:04:46 - 1.34.2.15 +++ rpm/rpmdb/tagname.c 5 May 2016 22:20:16 - 1.34.2.16 @@ -3,7 +3,12 @@ */ #include "system.h" + +#if defined(__APPLE__) /* XXX hotwire le32toh */ +#define le32toh(x) (x) +#else #include +#endif /* Don't redefine this macro if it already exists */ #ifndef le32toh @@ . __ 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/ 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: 03-Apr-2016 22:50:34 Branch: rpm-5_4 Handle: 2016040320503400 Modified files: (Branch: rpm-5_4) rpm/rpmdb tagname.c Log: - skip RPMSIGTAG_* <-> RPMTAG_* value collisions. Summary: RevisionChanges Path 1.34.2.13 +8 -10 rpm/rpmdb/tagname.c patch -p0 <<'@@ .' Index: rpm/rpmdb/tagname.c $ cvs diff -u -r1.34.2.12 -r1.34.2.13 tagname.c --- rpm/rpmdb/tagname.c 27 Feb 2016 21:34:57 - 1.34.2.12 +++ rpm/rpmdb/tagname.c 3 Apr 2016 20:50:34 - 1.34.2.13 @@ -512,26 +512,24 @@ * Validate that implicit and explicit types are identical. * @param he tag container */ -void tagTypeValidate(HE_t he); -void tagTypeValidate(HE_t he) +void tagTypeValidate(HE_t he, unsigned int flags); +void tagTypeValidate(HE_t he, unsigned int flags) { +/* XXX Skip RPMSIGTAG_* validation. */ +if (flags & HEADERGET_SIGHEADER) + return; + +#if !defined(SUPPORT_I18NSTRING_TYPE) /* XXX Re-map RPM_I18NSTRING_TYPE -> RPM_STRING_TYPE */ if (he->t == RPM_I18NSTRING_TYPE) he->t = RPM_STRING_TYPE; +#endif /* XXX Arbitrary tags are always strings. */ if ((he->tag & 0x4000) && (he->t == RPM_STRING_TYPE || he->t == RPM_STRING_ARRAY_TYPE)) return; -/* XXX Make 0x3fff disappear for now. Signature? */ -if (he->tag == 0x3fff && he->t == RPM_BIN_TYPE) - return; - -/* XXX hack around known borkage for now. */ -if (!(he->tag == 62)) -if (!(he->tag == 261 || he->tag == 269)) -if (!(he->tag == 1000 || he->tag == 1004 || he->tag == 1007)) if (!(he->tag == 1029 || he->tag == 1086 || he->tag == 1087)) if (he->t != (tagType(he->tag) & 0x)) fprintf(stderr, "==> warning: tag %u type(0x%x) != implicit type(0x%x)\n", (unsigned) he->tag, he->t, tagType(he->tag)); @@ . __ 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: 27-Feb-2016 22:34:57 Branch: rpm-5_4 Handle: 2016022721345700 Modified files: (Branch: rpm-5_4) rpm/rpmdb tagname.c Log: fix a endian incompatible error in generating rpm tag A flaw was found in the way rpm generating arbitrary tags, which leads to a incorrect query result, this issue is introduced by a incompatible endianess when the generating process is executed on different architectures. This patch resolves it by taking the byte order that host uses. Upstream-Status: Pending Signed-off-by: Ming LiuSummary: RevisionChanges Path 1.34.2.12 +16 -0 rpm/rpmdb/tagname.c patch -p0 <<'@@ .' Index: rpm/rpmdb/tagname.c $ cvs diff -u -r1.34.2.11 -r1.34.2.12 tagname.c --- rpm/rpmdb/tagname.c 27 Sep 2014 15:52:36 - 1.34.2.11 +++ rpm/rpmdb/tagname.c 27 Feb 2016 21:34:57 - 1.34.2.12 @@ -3,6 +3,19 @@ */ #include "system.h" +#include + +/* Don't redefine this macro if it already exists */ +#ifndef le32toh +#ifdef __USE_BSD +#include +#if __BYTE_ORDER == __LITTLE_ENDIAN +#define le32toh(x) (x) +#else +#define le32toh(x) __bswap_32(x) +#endif +#endif /* __USE_BSD */ +#endif /* le32toh */ #include /* XXX DIGEST_CTX, xtolower, xstrcasecmp */ #include @@ -153,7 +166,10 @@ xx = rpmDigestUpdate(ctx, s, nb); xx = rpmDigestFinal(ctx, , , 0); if (digest && digestlen > 4) { + /* The tag is stored in a uniform byte order for cross-endian compatibility. +Swap to the host uses. */ memcpy(, digest + (digestlen - 4), 4); + tag = le32toh(tag); tag = (rpmTag) (tag & 0x3fff); tag = (rpmTag) (tag | 0x4000); } @@ . __ RPM Package Managerhttp://rpm5.org CVS Sources Repositoryrpm-cvs@rpm5.org