commit 8241b884f83153dee9cdcddac7a476c6234cf156 Author: Kacper Kornet Date: Sun May 5 21:56:02 2013 +0100 Don't overwrite type of validated tag It caused headerGet(h, he, HEADERGET_NOI18NSTRING|HEADERGET_NOEXTENSION) to return always he->t = RPMTAG_STRING even when RPM_I18NSTRING_TYPE (char **) was returned in reality. diff --git a/rpmdb/tagname.c b/rpmdb/tagname.c index 540838b..174df60 100644 --- a/rpmdb/tagname.c +++ b/rpmdb/tagname.c @@ -491,26 +491,28 @@ tagStore_t tagStoreFree(tagStore_t dbiTags, size_t dbiNTags) void tagTypeValidate(HE_t he); void tagTypeValidate(HE_t he) { + HE_s he_s = *he; + /* XXX Re-map RPM_I18NSTRING_TYPE -> RPM_STRING_TYPE */ - if (he->t == RPM_I18NSTRING_TYPE) - he->t = RPM_STRING_TYPE; + if (he_s.t == RPM_I18NSTRING_TYPE) + he_s.t = RPM_STRING_TYPE; /* XXX Arbitrary tags are always strings. */ - if ((he->tag & 0x40000000) - && (he->t == RPM_STRING_TYPE || he->t == RPM_STRING_ARRAY_TYPE)) + if ((he_s.tag & 0x40000000) + && (he_s.t == RPM_STRING_TYPE || he_s.t == RPM_STRING_ARRAY_TYPE)) return; /* XXX Make 0x3fffffff disappear for now. Signature? */ - if (he->tag == 0x3fffffff && he->t == RPM_BIN_TYPE) + if (he_s.tag == 0x3fffffff && he_s.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)) -if (!(he->tag == 1086 || he->tag == 1087)) -if (he->t != (tagType(he->tag) & 0xffff)) -fprintf(stderr, "==> warning: tag %u type(0x%x) != implicit type(0x%x)\n", (unsigned) he->tag, he->t, tagType(he->tag)); +if (!(he_s.tag == 62)) +if (!(he_s.tag == 261 || he_s.tag == 269)) +if (!(he_s.tag == 1000 || he_s.tag == 1004 || he_s.tag == 1007)) +if (!(he_s.tag == 1029)) +if (!(he_s.tag == 1086 || he_s.tag == 1087)) +if (he_s.t != (tagType(he_s.tag) & 0xffff)) +fprintf(stderr, "==> warning: tag %u type(0x%x) != implicit type(0x%x)\n", (unsigned) he_s.tag, he_s.t, tagType(he_s.tag)); } #endif