Don't return data from headerGet() on regionSwab() failure
authorPanu Matilainen <pmatilai@redhat.com>
Tue, 10 Mar 2009 08:17:13 +0000 (10:17 +0200)
committerPanu Matilainen <pmatilai@redhat.com>
Tue, 10 Mar 2009 08:17:13 +0000 (10:17 +0200)
- callers dont expect to free data if headerGet() returns failure,
  leaking memory

lib/header.c

index 96a6f1c..8cac975 100644 (file)
@@ -1183,6 +1183,10 @@ static int copyTdEntry(const indexEntry entry, rpmtd td, headerGetFlags flags)
            dataStart = (unsigned char *) memcpy(pe + ril, dataStart, rdl);
 
            rc = regionSwab(NULL, ril, 0, pe, dataStart, dataStart + rdl, 0);
+           /* don't return data on failure */
+           if (rc < 0) {
+               td->data = _free(td->data);
+           }
            /* XXX 1 on success. */
            rc = (rc < 0) ? 0 : 1;
        } else {