use free() instead of delete() when realloc is used
authorMichael Vogt <mvo@debian.org>
Tue, 27 May 2014 14:25:43 +0000 (16:25 +0200)
committerMichael Vogt <mvo@debian.org>
Tue, 27 May 2014 14:25:43 +0000 (16:25 +0200)
ContentsExtract::~ContentsExtract() needs to use free() because
Data got allocated via realloc()

Reported-By: clang -fsanitize=address -fno-omit-frame-pointer
apt-pkg/contrib/fileutl.cc
ftparchive/cachedb.cc
ftparchive/cachedb.h
ftparchive/contents.cc
ftparchive/contents.h
ftparchive/writer.h

index b77c7ff..bfd9581 100644 (file)
@@ -1241,7 +1241,8 @@ bool FileFd::OpenInternDescriptor(unsigned int const Mode, APT::Configuration::C
         if (d->lzma == NULL)
            d->lzma = new FileFdPrivate::LZMAFILE;
         d->lzma->file = (FILE*) compress_struct;
-        d->lzma->stream = LZMA_STREAM_INIT;
+         lzma_stream tmp_stream = LZMA_STREAM_INIT;
+        d->lzma->stream = tmp_stream;
 
         if ((Mode & ReadWrite) == ReadWrite)
            return FileFdError("ReadWrite mode is not supported for file %s", FileName.c_str());
index e56deae..12eac20 100644 (file)
 #include <apti18n.h>
                                                                        /*}}}*/
 
+CacheDB::CacheDB(std::string const &DB) 
+   : Dbp(0), Fd(NULL), DebFile(0)
+{
+   TmpKey[0]='\0';
+   ReadyDB(DB);
+};
+
+CacheDB::~CacheDB()
+{
+   ReadyDB();
+   delete DebFile;
+};
+
 // CacheDB::ReadyDB - Ready the DB2                                    /*{{{*/
 // ---------------------------------------------------------------------
 /* This opens the DB2 file for caching package information */
index 54a2749..edb8594 100644 (file)
@@ -156,7 +156,7 @@ class CacheDB
                SHA512Bytes(0),Packages(0), Misses(0), DeLinkBytes(0) {};
    } Stats;
    
-   bool ReadyDB(std::string const &DB);
+   bool ReadyDB(std::string const &DB = "");
    inline bool DBFailed() {return Dbp != 0 && DBLoaded == false;};
    inline bool Loaded() {return DBLoaded == true;};
    
@@ -180,8 +180,8 @@ class CacheDB
    
    bool Clean();
    
-   CacheDB(std::string const &DB) : Dbp(0), Fd(NULL), DebFile(0) {TmpKey[0]='\0'; ReadyDB(DB);};
-   ~CacheDB() {ReadyDB(std::string()); delete DebFile;};
+   CacheDB(std::string const &DB);
+   ~CacheDB();
 };
     
 #endif
index 7a1fb77..91dd2b8 100644 (file)
@@ -302,7 +302,18 @@ void GenContents::DoPrint(FILE *Out,GenContents::Node *Top, char *Buf)
    DoPrint(Out,Top->BTreeRight,Buf);  
 }
                                                                        /*}}}*/
-
+// ContentsExtract Constructor                                         /*{{{*/
+ContentsExtract::ContentsExtract()
+   : Data(0), MaxSize(0), CurSize(0) 
+{
+};
+                                                                       /*}}}*/
+// ContentsExtract Destructor                                          /*{{{*/
+ContentsExtract::~ContentsExtract()
+{
+   free(Data);
+};
+                                                                       /*}}}*/
 // ContentsExtract::Read - Read the archive                            /*{{{*/
 // ---------------------------------------------------------------------
 /* */
index dbbb833..f58e327 100644 (file)
@@ -85,8 +85,8 @@ class ContentsExtract : public pkgDirStream
    bool TakeContents(const void *Data,unsigned long long Length);
    void Add(GenContents &Contents,std::string const &Package);
    
-   ContentsExtract() : Data(0), MaxSize(0), CurSize(0) {};
-   virtual ~ContentsExtract() {delete [] Data;};
+   ContentsExtract();
+   virtual ~ContentsExtract();
 };
 
 #endif
index b1a653e..d8a10e0 100644 (file)
@@ -127,8 +127,10 @@ class PackagesWriter : public FTWScanner
       {return Over.ReadExtraOverride(File);};
    virtual bool DoPackage(string FileName);
 
-   PackagesWriter(string const &DB,string const &Overrides,string const &ExtOverrides=string(),
-                 string const &Arch=string());
+   PackagesWriter(string const &DB,
+                  string const &Overrides,
+                  string const &ExtOverrides = "",
+                 string const &Arch = "");
    virtual ~PackagesWriter() {};
 };