--- ./lib/package.c.orig 2021-03-22 05:05:07.312635983 -0500 +++ ./lib/package.c 2021-11-30 12:48:31.637122803 -0600 @@ -35,21 +35,22 @@ rpmTagVal stag; rpmTagVal xtag; rpm_count_t count; + int quirk; } const xlateTags[] = { - { RPMSIGTAG_SIZE, RPMTAG_SIGSIZE, 1 }, - { RPMSIGTAG_PGP, RPMTAG_SIGPGP, 0 }, - { RPMSIGTAG_MD5, RPMTAG_SIGMD5, 16 }, - { RPMSIGTAG_GPG, RPMTAG_SIGGPG, 0 }, - /* { RPMSIGTAG_PGP5, RPMTAG_SIGPGP5, 0 }, */ /* long obsolete, dont use */ - { RPMSIGTAG_PAYLOADSIZE, RPMTAG_ARCHIVESIZE, 1 }, - { RPMSIGTAG_FILESIGNATURES, RPMTAG_FILESIGNATURES, 0 }, - { RPMSIGTAG_FILESIGNATURELENGTH, RPMTAG_FILESIGNATURELENGTH, 1 }, - { RPMSIGTAG_SHA1, RPMTAG_SHA1HEADER, 1 }, - { RPMSIGTAG_SHA256, RPMTAG_SHA256HEADER, 1 }, - { RPMSIGTAG_DSA, RPMTAG_DSAHEADER, 0 }, - { RPMSIGTAG_RSA, RPMTAG_RSAHEADER, 0 }, - { RPMSIGTAG_LONGSIZE, RPMTAG_LONGSIGSIZE, 1 }, - { RPMSIGTAG_LONGARCHIVESIZE, RPMTAG_LONGARCHIVESIZE, 1 }, + { RPMSIGTAG_SIZE, RPMTAG_SIGSIZE, 1, 0 }, + { RPMSIGTAG_PGP, RPMTAG_SIGPGP, 0, 0 }, + { RPMSIGTAG_MD5, RPMTAG_SIGMD5, 16, 0 }, + { RPMSIGTAG_GPG, RPMTAG_SIGGPG, 0, 0 }, + /* { RPMSIGTAG_PGP5, RPMTAG_SIGPGP5, 0, 0 }, */ /* long obsolete, dont use */ + { RPMSIGTAG_PAYLOADSIZE, RPMTAG_ARCHIVESIZE, 1, 1 }, + { RPMSIGTAG_FILESIGNATURES, RPMTAG_FILESIGNATURES, 0, 1 }, + { RPMSIGTAG_FILESIGNATURELENGTH, RPMTAG_FILESIGNATURELENGTH, 1, 1 }, + { RPMSIGTAG_SHA1, RPMTAG_SHA1HEADER, 1, 0 }, + { RPMSIGTAG_SHA256, RPMTAG_SHA256HEADER, 1, 0 }, + { RPMSIGTAG_DSA, RPMTAG_DSAHEADER, 0, 0 }, + { RPMSIGTAG_RSA, RPMTAG_RSAHEADER, 0, 0 }, + { RPMSIGTAG_LONGSIZE, RPMTAG_LONGSIGSIZE, 1, 0 }, + { RPMSIGTAG_LONGARCHIVESIZE, RPMTAG_LONGARCHIVESIZE, 1, 0 }, { 0 } }; @@ -67,8 +68,12 @@ for (xl = xlateTags; xl->stag; xl++) { /* There mustn't be one in the main header */ - if (headerIsEntry(h, xl->xtag)) + if (headerIsEntry(h, xl->xtag)) { + /* Some tags may exist in either header, but never both */ + if (xl->quirk && !headerIsEntry(sigh, xl->stag)) + continue; goto exit; + } } rpmtdReset(&td);