summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Vogt <mvo@ubuntu.com>2014-10-07 08:43:46 +0200
committerMichael Vogt <mvo@ubuntu.com>2014-10-07 08:43:46 +0200
commit5b33fab8c9a8c26cbc8ce3bf5e1573279d7884b3 (patch)
tree77ddb4c1e526d46b5b6142f4657b9d108430f856
parent62acbba8d1e8c9f395ccd1068e89bf14a93d4aa8 (diff)
add ftp expected size check
-rw-r--r--methods/ftp.cc10
-rw-r--r--methods/ftp.h2
-rw-r--r--methods/https.cc1
3 files changed, 8 insertions, 5 deletions
diff --git a/methods/ftp.cc b/methods/ftp.cc
index ac76295f0..75ace1c5a 100644
--- a/methods/ftp.cc
+++ b/methods/ftp.cc
@@ -849,7 +849,7 @@ bool FTPConn::Finalize()
/* This opens a data connection, sends REST and RETR and then
transfers the file over. */
bool FTPConn::Get(const char *Path,FileFd &To,unsigned long long Resume,
- Hashes &Hash,bool &Missing)
+ Hashes &Hash,bool &Missing, unsigned long long ExpectedSize)
{
Missing = false;
if (CreateDataFd() == false)
@@ -922,7 +922,11 @@ bool FTPConn::Get(const char *Path,FileFd &To,unsigned long long Resume,
{
Close();
return false;
- }
+ }
+
+ if (ExpectedSize > 0 && To.Tell() > ExpectedSize)
+ return _error->Error("Writing more data than expected (%llu > %llu)",
+ To.Tell(), ExpectedSize);
}
// All done
@@ -1063,7 +1067,7 @@ bool FtpMethod::Fetch(FetchItem *Itm)
FailFd = Fd.Fd();
bool Missing;
- if (Server->Get(File,Fd,Res.ResumePoint,Hash,Missing) == false)
+ if (Server->Get(File,Fd,Res.ResumePoint,Hash,Missing,Itm->ExpectedSize) == false)
{
Fd.Close();
diff --git a/methods/ftp.h b/methods/ftp.h
index dd92f0086..416a91980 100644
--- a/methods/ftp.h
+++ b/methods/ftp.h
@@ -62,7 +62,7 @@ class FTPConn
bool Size(const char *Path,unsigned long long &Size);
bool ModTime(const char *Path, time_t &Time);
bool Get(const char *Path,FileFd &To,unsigned long long Resume,
- Hashes &MD5,bool &Missing);
+ Hashes &MD5,bool &Missing, unsigned long long ExpectedSize);
FTPConn(URI Srv);
~FTPConn();
diff --git a/methods/https.cc b/methods/https.cc
index f8e84a2ff..a4794e705 100644
--- a/methods/https.cc
+++ b/methods/https.cc
@@ -86,7 +86,6 @@ HttpsMethod::write_data(void *buffer, size_t size, size_t nmemb, void *userp)
return _error->Error("Writing more data than expected (%llu > %llu)",
me->TotalWritten, me->Queue->ExpectedSize);
-
return size*nmemb;
}