add ftp expected size check
authorMichael Vogt <mvo@ubuntu.com>
Tue, 7 Oct 2014 06:43:46 +0000 (08:43 +0200)
committerMichael Vogt <mvo@ubuntu.com>
Tue, 7 Oct 2014 06:43:46 +0000 (08:43 +0200)
methods/ftp.cc
methods/ftp.h
methods/https.cc

index ac76295..75ace1c 100644 (file)
@@ -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();
 
index dd92f00..416a919 100644 (file)
@@ -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();
index f8e84a2..a4794e7 100644 (file)
@@ -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;
 }