]> git.saurik.com Git - apt.git/blobdiff - ftparchive/cachedb.cc
fix memory leaks reported by -fsanitize
[apt.git] / ftparchive / cachedb.cc
index 7770a32449ff41f32614db8869565c27d2362fcd..ce6c865f334f9a9613717edebce81cf99891a4f1 100644 (file)
 #include <apti18n.h>
                                                                        /*}}}*/
 
 #include <apti18n.h>
                                                                        /*}}}*/
 
-CacheDB::CacheDB(std::string const &DB) 
+CacheDB::CacheDB(std::string const &DB)
    : Dbp(0), Fd(NULL), DebFile(0)
 {
    TmpKey[0]='\0';
    ReadyDB(DB);
    : Dbp(0), Fd(NULL), DebFile(0)
 {
    TmpKey[0]='\0';
    ReadyDB(DB);
-};
+}
 
 CacheDB::~CacheDB()
 {
    ReadyDB();
    delete DebFile;
 
 CacheDB::~CacheDB()
 {
    ReadyDB();
    delete DebFile;
-};
+   CloseFile();
+}
 
 // CacheDB::ReadyDB - Ready the DB2                                    /*{{{*/
 // ---------------------------------------------------------------------
 
 // CacheDB::ReadyDB - Ready the DB2                                    /*{{{*/
 // ---------------------------------------------------------------------
@@ -322,12 +323,12 @@ bool CacheDB::LoadSource()                                                /*{{{*/
    if (Dsc.Read(FileName) == false)
       return false;
 
    if (Dsc.Read(FileName) == false)
       return false;
 
-   if (Dsc.Data == 0)
+   if (Dsc.Length == 0)
       return _error->Error(_("Failed to read .dsc"));
       return _error->Error(_("Failed to read .dsc"));
-   
+
    // Write back the control information
    InitQuerySource();
    // Write back the control information
    InitQuerySource();
-   if (Put(Dsc.Data, Dsc.Length) == true)
+   if (Put(Dsc.Data.c_str(), Dsc.Length) == true)
       CurStat.Flags |= FlSource;
 
    return true;
       CurStat.Flags |= FlSource;
 
    return true;
@@ -441,8 +442,8 @@ bool CacheDB::GetHashes(bool const GenOnly, unsigned int const DoHashes)
       if (OpenFile() == false)
         return false;
 
       if (OpenFile() == false)
         return false;
 
-      Hashes hashes;
-      if (Fd->Seek(0) == false || hashes.AddFD(*Fd, CurStat.FileSize, FlHashes) == false)
+      Hashes hashes(FlHashes);
+      if (Fd->Seek(0) == false || hashes.AddFD(*Fd, CurStat.FileSize) == false)
         return false;
 
       HashStringList hl = hashes.GetHashStringList();
         return false;
 
       HashStringList hl = hashes.GetHashStringList();
@@ -473,6 +474,10 @@ bool CacheDB::GetHashes(bool const GenOnly, unsigned int const DoHashes)
            hex2bytes(CurStat.MD5, hs->HashValue().data(), sizeof(CurStat.MD5));
            CurStat.Flags |= FlMD5;
         }
            hex2bytes(CurStat.MD5, hs->HashValue().data(), sizeof(CurStat.MD5));
            CurStat.Flags |= FlMD5;
         }
+        else if (strcasecmp(hs->HashType().c_str(), "Checksum-FileSize") == 0)
+        {
+           // we store it in a different field already
+        }
         else
            return _error->Error("Got unknown unrequested hashtype %s", hs->HashType().c_str());
       }
         else
            return _error->Error("Got unknown unrequested hashtype %s", hs->HashType().c_str());
       }