|
Panu Matilainen |
d3306a |
From f6521c50f6836374a0f7995f8f393aaf36e178ea Mon Sep 17 00:00:00 2001
|
|
Panu Matilainen |
d3306a |
Message-Id: <f6521c50f6836374a0f7995f8f393aaf36e178ea.1478522529.git.pmatilai@redhat.com>
|
|
Panu Matilainen |
d3306a |
From: Panu Matilainen <pmatilai@redhat.com>
|
|
Panu Matilainen |
d3306a |
Date: Mon, 7 Nov 2016 13:38:39 +0200
|
|
Panu Matilainen |
d3306a |
Subject: [PATCH] Fix %transfiletriggerpostun undeterministic behavior
|
|
Panu Matilainen |
d3306a |
(RhBug:1284645)
|
|
Panu Matilainen |
d3306a |
|
|
Panu Matilainen |
d3306a |
Keys from rpmdbIndexIteratorNext() are not necessarily \0-terminated,
|
|
Panu Matilainen |
d3306a |
buyer beware.
|
|
Panu Matilainen |
d3306a |
|
|
Panu Matilainen |
d3306a |
Sometimes you get lucky, but in particular when built as PIE (such as
|
|
Panu Matilainen |
d3306a |
by default in Fedora) this falls over consistently.
|
|
Panu Matilainen |
d3306a |
In Fedora this has been hidden by the fact that test suite has been
|
|
Panu Matilainen |
d3306a |
disabled because its been so broken with fakechroot until recently,
|
|
Panu Matilainen |
d3306a |
and without PIE the testsuite regularly passes. Valgrind does
|
|
Panu Matilainen |
d3306a |
complain though.
|
|
Panu Matilainen |
d3306a |
---
|
|
Panu Matilainen |
d3306a |
lib/rpmtriggers.c | 5 ++++-
|
|
Panu Matilainen |
d3306a |
1 file changed, 4 insertions(+), 1 deletion(-)
|
|
Panu Matilainen |
d3306a |
|
|
Panu Matilainen |
d3306a |
diff --git a/lib/rpmtriggers.c b/lib/rpmtriggers.c
|
|
Panu Matilainen |
d3306a |
index a8612c0..ca22a6b 100644
|
|
Panu Matilainen |
d3306a |
--- a/lib/rpmtriggers.c
|
|
Panu Matilainen |
d3306a |
+++ b/lib/rpmtriggers.c
|
|
Panu Matilainen |
d3306a |
@@ -114,8 +114,11 @@ void rpmtriggersPrepPostUnTransFileTrigs(rpmts ts, rpmte te)
|
|
Panu Matilainen |
d3306a |
|
|
Panu Matilainen |
d3306a |
/* Iterate over file triggers in rpmdb */
|
|
Panu Matilainen |
d3306a |
while ((rpmdbIndexIteratorNext(ii, &key, &keylen)) == 0) {
|
|
Panu Matilainen |
d3306a |
+ char pfx[keylen + 1];
|
|
Panu Matilainen |
d3306a |
+ memcpy(pfx, key, keylen);
|
|
Panu Matilainen |
d3306a |
+ pfx[keylen] = '\0';
|
|
Panu Matilainen |
d3306a |
/* Check if file trigger matches any file in this te */
|
|
Panu Matilainen |
d3306a |
- rpmfi fi = rpmfilesFindPrefix(files, key);
|
|
Panu Matilainen |
d3306a |
+ rpmfi fi = rpmfilesFindPrefix(files, pfx);
|
|
Panu Matilainen |
d3306a |
if (rpmfiFC(fi) > 0) {
|
|
Panu Matilainen |
d3306a |
/* If yes then store it */
|
|
Panu Matilainen |
d3306a |
rpmdbAppendIterator(mi, rpmdbIndexIteratorPkgOffsets(ii),
|
|
Panu Matilainen |
d3306a |
--
|
|
Panu Matilainen |
d3306a |
2.7.4
|
|
Panu Matilainen |
d3306a |
|