Transaction element file info can be legally NULL in some cases
authorPanu Matilainen <pmatilai@redhat.com>
Wed, 21 Mar 2012 07:07:21 +0000 (09:07 +0200)
committerPanu Matilainen <pmatilai@redhat.com>
Wed, 21 Mar 2012 07:07:21 +0000 (09:07 +0200)
- rpmteClose() will wipe out the file info to free memory, we only
  should care whether we failed to (re)load the file info. This
  thinko in commit 06a2f1269b035a3a76464149834f2a5a8c4e89f2
  broke %posttrans scriptlets (and without commit
  274dbf557d1cac90f7c278f9b6d6af05997d92df, %pretrans in other
  circumstances), whoopsie *blush*. Now, off to write a test-case
  for our scriptlet behavior...

lib/rpmte.c

index 65e1e76..65d65af 100644 (file)
@@ -693,11 +693,12 @@ static int rpmteOpen(rpmte te, int reload_fi)
     }
     if (h != NULL) {
        if (reload_fi) {
+           /* This can fail if we get a different, bad header from callback */
            te->fi = getFI(te, h);
+           rc = (te->fi != NULL);
+       } else {
+           rc = 1;
        }
-
-       /* This can fail if we get a different, bad header from callback */
-       rc = (te->fi != NULL);
        
        rpmteSetHeader(te, h);
        headerFree(h);