summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Andres Klode <jak@debian.org>2009-07-16 12:59:39 +0200
committerJulian Andres Klode <jak@debian.org>2009-07-16 12:59:39 +0200
commit04f4e1a3b110ef5ff8870816169f8f0b9eb23dce (patch)
tree7dc27a5dae41ae1229e8bf14eaa5e16a28249b10
parent6e7c6c3f58193fd5db3d9d598ac65a1571522a58 (diff)
* apt-pkg/contrib/hashes.cc, apt-pkg/contrib/md5.cc:
- Support reading until EOF if Size=0 to match behaviour of SHA1Summation and SHA256Summation
-rw-r--r--apt-pkg/contrib/hashes.cc13
-rw-r--r--apt-pkg/contrib/md5.cc13
-rw-r--r--debian/changelog3
3 files changed, 21 insertions, 8 deletions
diff --git a/apt-pkg/contrib/hashes.cc b/apt-pkg/contrib/hashes.cc
index fcc2f887c..70f2db06d 100644
--- a/apt-pkg/contrib/hashes.cc
+++ b/apt-pkg/contrib/hashes.cc
@@ -108,11 +108,16 @@ bool Hashes::AddFD(int Fd,unsigned long Size)
{
unsigned char Buf[64*64];
int Res = 0;
- while (Size != 0)
+ int ToEOF = (Size == 0);
+ while (Size != 0 || ToEOF)
{
- Res = read(Fd,Buf,min(Size,(unsigned long)sizeof(Buf)));
- if (Res < 0 || (unsigned)Res != min(Size,(unsigned long)sizeof(Buf)))
- return false;
+ unsigned n = sizeof(Buf);
+ if (!ToEOF) n = min(Size,(unsigned long)n);
+ Res = read(Fd,Buf,n);
+ if (Res < 0 || (!ToEOF && (unsigned) Res != n)) // error, or short read
+ return false;
+ if (ToEOF && Res == 0) // EOF
+ break;
Size -= Res;
MD5.Add(Buf,Res);
SHA1.Add(Buf,Res);
diff --git a/apt-pkg/contrib/md5.cc b/apt-pkg/contrib/md5.cc
index a095f8f0f..2bfd70f1b 100644
--- a/apt-pkg/contrib/md5.cc
+++ b/apt-pkg/contrib/md5.cc
@@ -294,11 +294,16 @@ bool MD5Summation::AddFD(int Fd,unsigned long Size)
{
unsigned char Buf[64*64];
int Res = 0;
- while (Size != 0)
+ int ToEOF = (Size == 0);
+ while (Size != 0 || ToEOF)
{
- Res = read(Fd,Buf,min(Size,(unsigned long)sizeof(Buf)));
- if (Res < 0 || (unsigned)Res != min(Size,(unsigned long)sizeof(Buf)))
- return false;
+ unsigned n = sizeof(Buf);
+ if (!ToEOF) n = min(Size,(unsigned long)n);
+ Res = read(Fd,Buf,n);
+ if (Res < 0 || (!ToEOF && (unsigned) Res != n)) // error, or short read
+ return false;
+ if (ToEOF && Res == 0) // EOF
+ break;
Size -= Res;
Add(Buf,Res);
}
diff --git a/debian/changelog b/debian/changelog
index 7f14502e7..fc88e08cb 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -48,6 +48,9 @@ apt (0.7.22) UNRELEASED; urgency=low
* configure-index: document Dir::Etc::SourceParts and some other options
(Closes: #459605)
* Remove Eugene V. Lyubimkin from uploaders as requested.
+ * apt-pkg/contrib/hashes.cc, apt-pkg/contrib/md5.cc:
+ - Support reading until EOF if Size=0 to match behaviour of
+ SHA1Summation and SHA256Summation
-- Julian Andres Klode <jak@debian.org> Fri, 03 Jul 2009 08:27:35 +0200