diff options
author | Panu Matilainen <pmatilai@redhat.com> | 2017-04-04 17:07:00 +0300 |
---|---|---|
committer | Panu Matilainen <pmatilai@redhat.com> | 2017-04-04 17:15:14 +0300 |
commit | ab052ab775a789afc02cc9691b2e0526573bbea7 (patch) | |
tree | 0797fad398effa01ba03ae14d638f96addd792cd | |
parent | 35c238cc69e6e556a014a9c0b6f4b2c3241362af (diff) | |
download | rpm-ab052ab775a789afc02cc9691b2e0526573bbea7.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.
-rw-r--r-- | lib/rpmfi.c | 8 |
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; |