--- /dev/null
+commit 8241b884f83153dee9cdcddac7a476c6234cf156
+Author: Kacper Kornet <draenog@pld-linux.org>
+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