]>
Commit | Line | Data |
---|---|---|
c065c1c1 KK |
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 |