summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDemi Marie Obenour <athena@invisiblethingslab.com>2021-03-16 11:41:16 +0200
committerPanu Matilainen <pmatilai@redhat.com>2021-03-22 12:04:27 +0200
commit75e835918f15629a78abdd26b0bb615b5eaabf07 (patch)
treeb6c4fc41fddbc76ddc361d95e52a06eaeb33c4cf
parentbcfef4a4ed0fa5bbfdaf8ad3679839bcba249917 (diff)
downloadrpm-75e835918f15629a78abdd26b0bb615b5eaabf07.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.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/lib/package.c b/lib/package.c
index 068b381f2..36ed5abc6 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);