summaryrefslogtreecommitdiff
path: root/lib/rpmfi.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rpmfi.c')
-rw-r--r--lib/rpmfi.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/lib/rpmfi.c b/lib/rpmfi.c
index 4e89e5888..320296a4d 100644
--- a/lib/rpmfi.c
+++ b/lib/rpmfi.c
@@ -2227,6 +2227,14 @@ int rpmfiArchiveReadToFilePsm(rpmfi fi, FD_t fd, int nodigest, rpmpsm psm)
size_t diglen = rpmDigestLength(digestalgo);
if (memcmp(digest, fidigest, diglen)) {
rc = RPMERR_DIGEST_MISMATCH;
+
+ /* ...but in old packages, empty files have zeros for digest */
+ if (rpmfiFSize(fi) == 0 && digestalgo == PGPHASHALGO_MD5) {
+ uint8_t zeros[diglen];
+ memset(&zeros, 0, diglen);
+ if (memcmp(zeros, fidigest, diglen) == 0)
+ rc = 0;
+ }
}
} else {
rc = RPMERR_DIGEST_MISMATCH;