summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPanu Matilainen <pmatilai@redhat.com>2017-04-04 17:07:00 +0300
committerPanu Matilainen <pmatilai@redhat.com>2017-10-26 10:40:47 +0300
commit03971ea52c232ab531cafcd2292cf187c2f7c11c (patch)
tree5df3f45cb13ab05d16d764f1dfcfea29914d59ed
parent0af7ce8fc60f9ea42c34f409b2c22c40a7162bc2 (diff)
downloadrpm-03971ea52c232ab531cafcd2292cf187c2f7c11c.tar.gz
In old packages, zero-length files have zeros for digest (RhBug:1352222)
Commit 8192746196745e15517e49230de183a0211017b6 enabled digest checks for empty files, which is fine for modern era packages but rpm didn't always generate a proper digest for them. Handle that as the special case it is: preserve the digests checks as they are, but additionally test and accept zeros too for MD5-era zero-length files. (cherry picked from commit ab052ab775a789afc02cc9691b2e0526573bbea7)
-rw-r--r--lib/rpmfi.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/lib/rpmfi.c b/lib/rpmfi.c
index 924ff4b61..202b4b3ef 100644
--- a/lib/rpmfi.c
+++ b/lib/rpmfi.c
@@ -2207,6 +2207,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;