diff options
author | Demi Marie Obenour <athena@invisiblethingslab.com> | 2021-03-16 11:41:16 +0200 |
---|---|---|
committer | Panu Matilainen <pmatilai@redhat.com> | 2021-03-22 12:12:12 +0200 |
commit | 79d90b25141dfbf3571813f254a4d6c45eef88d1 (patch) | |
tree | e86a893665d10bc5af5f0596011cc8bf3f18b80a | |
parent | 9fe388c9a48b9074d25515e0fd129d21471036a3 (diff) | |
download | rpm-79d90b25141dfbf3571813f254a4d6c45eef88d1.tar.gz |
Optimize signature header merge a bit
Look up possible offending tags from the main header first in a separate
loop, this avoids having to re-sort after each headerPut() operation.
(cherry picked from commit f7b97593af5cf818a5c6c5b9bc55bba6d08c9cb0)
-rw-r--r-- | lib/package.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/lib/package.c b/lib/package.c index ac3c54ade..21b4a0da3 100644 --- a/lib/package.c +++ b/lib/package.c @@ -65,11 +65,14 @@ rpmTagVal headerMergeLegacySigs(Header h, Header sigh, char **msg) const struct taglate_s *xl; struct rpmtd_s td; - rpmtdReset(&td); for (xl = xlateTags; xl->stag; xl++) { /* There mustn't be one in the main header */ if (headerIsEntry(h, xl->xtag)) - break; + goto exit; + } + + rpmtdReset(&td); + for (xl = xlateTags; xl->stag; xl++) { if (headerGet(sigh, xl->stag, &td, HEADERGET_RAW|HEADERGET_MINMEM)) { /* Translate legacy tags */ if (xl->stag != xl->xtag) @@ -88,6 +91,7 @@ rpmTagVal headerMergeLegacySigs(Header h, Header sigh, char **msg) } rpmtdFreeData(&td); +exit: if (xl->stag) { rasprintf(msg, "invalid signature tag %s (%d)", rpmTagGetName(xl->xtag), xl->xtag); |