]> git.pld-linux.org Git - packages/rpm.git/blob - rpm-preserve-tag-type.patch
- db_buffer_small patch is needed with db6.0 too (up to 3 retries needed:
[packages/rpm.git] / rpm-preserve-tag-type.patch
1 commit 8241b884f83153dee9cdcddac7a476c6234cf156
2 Author: Kacper Kornet <draenog@pld-linux.org>
3 Date:   Sun May 5 21:56:02 2013 +0100
4
5     Don't overwrite type of validated tag
6     
7     It caused  headerGet(h, he, HEADERGET_NOI18NSTRING|HEADERGET_NOEXTENSION)
8     to return always he->t = RPMTAG_STRING even when RPM_I18NSTRING_TYPE (char **)
9     was returned in reality.
10
11 diff --git a/rpmdb/tagname.c b/rpmdb/tagname.c
12 index 540838b..174df60 100644
13 --- a/rpmdb/tagname.c
14 +++ b/rpmdb/tagname.c
15 @@ -491,26 +491,28 @@ tagStore_t tagStoreFree(tagStore_t dbiTags, size_t dbiNTags)
16  void tagTypeValidate(HE_t he);
17  void tagTypeValidate(HE_t he)
18  {
19 +    HE_s he_s = *he;
20 +
21      /* XXX Re-map RPM_I18NSTRING_TYPE -> RPM_STRING_TYPE */
22 -    if (he->t == RPM_I18NSTRING_TYPE)
23 -       he->t = RPM_STRING_TYPE;
24 +    if (he_s.t == RPM_I18NSTRING_TYPE)
25 +       he_s.t = RPM_STRING_TYPE;
26  
27      /* XXX Arbitrary tags are always strings. */
28 -    if ((he->tag & 0x40000000)
29 -     && (he->t == RPM_STRING_TYPE || he->t == RPM_STRING_ARRAY_TYPE))
30 +    if ((he_s.tag & 0x40000000)
31 +     && (he_s.t == RPM_STRING_TYPE || he_s.t == RPM_STRING_ARRAY_TYPE))
32         return;
33  
34      /* XXX Make 0x3fffffff disappear for now. Signature? */
35 -    if (he->tag == 0x3fffffff && he->t == RPM_BIN_TYPE)
36 +    if (he_s.tag == 0x3fffffff && he_s.t == RPM_BIN_TYPE)
37         return;
38  
39  /* XXX hack around known borkage for now. */
40 -if (!(he->tag == 62))
41 -if (!(he->tag == 261 || he->tag == 269))
42 -if (!(he->tag == 1000 || he->tag == 1004 || he->tag == 1007))
43 -if (!(he->tag == 1029))
44 -if (!(he->tag == 1086 || he->tag == 1087))
45 -if (he->t != (tagType(he->tag) & 0xffff))
46 -fprintf(stderr, "==> warning: tag %u type(0x%x) != implicit type(0x%x)\n", (unsigned) he->tag, he->t, tagType(he->tag));
47 +if (!(he_s.tag == 62))
48 +if (!(he_s.tag == 261 || he_s.tag == 269))
49 +if (!(he_s.tag == 1000 || he_s.tag == 1004 || he_s.tag == 1007))
50 +if (!(he_s.tag == 1029))
51 +if (!(he_s.tag == 1086 || he_s.tag == 1087))
52 +if (he_s.t != (tagType(he_s.tag) & 0xffff))
53 +fprintf(stderr, "==> warning: tag %u type(0x%x) != implicit type(0x%x)\n", (unsigned) he_s.tag, he_s.t, tagType(he_s.tag));
54  }
55  #endif
This page took 0.028515 seconds and 3 git commands to generate.