]> git.saurik.com Git - apt.git/commitdiff
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 ac76295f02ef1342e00dc7a0e9aac52fa38a77a5..75ace1c5a4e1b7198f984b8d357ea095ab15e61a 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 dd92f0086e936043af045211f923ae0eccad9ceb..416a91980d81c22f8cf678350b21068a90a94bdb 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 f8e84a2ffd7b984a48cd1532b580f0b382768770..a4794e70509fc19f8145c4a1d51bd116bb62c599 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;
 }