]> git.saurik.com Git - apt.git/commitdiff
fix two memory leaks reported by gcc
authorDavid Kalnischkies <david@kalnischkies.de>
Fri, 11 Sep 2015 19:02:19 +0000 (21:02 +0200)
committerDavid Kalnischkies <david@kalnischkies.de>
Mon, 14 Sep 2015 13:22:18 +0000 (15:22 +0200)
Reported-By: gcc -fsanitize=address -fno-sanitize=vptr
Git-Dch: Ignore

apt-pkg/metaindex.cc
methods/http.cc
methods/http.h
methods/https.cc
methods/https.h
methods/server.cc
methods/server.h

index 1632b928cfb57f4a1e40b3ab4f92207b44eea67c..5c095a2ad2a6d2c820cbe7d9f50ac4b6dbaef413 100644 (file)
@@ -32,12 +32,15 @@ metaIndex::metaIndex(std::string const &URI, std::string const &Dist,
 
 metaIndex::~metaIndex()
 {
 
 metaIndex::~metaIndex()
 {
-   if (Indexes == 0)
-      return;
-   for (std::vector<pkgIndexFile *>::iterator I = (*Indexes).begin();
-        I != (*Indexes).end(); ++I)
-      delete *I;
-   delete Indexes;
+   if (Indexes != 0)
+   {
+      for (std::vector<pkgIndexFile *>::iterator I = (*Indexes).begin();
+           I != (*Indexes).end(); ++I)
+        delete *I;
+      delete Indexes;
+   }
+   for (auto const &E: Entries)
+      delete E.second;
 }
 
 // one line Getters for public fields                                  /*{{{*/
 }
 
 // one line Getters for public fields                                  /*{{{*/
index ce697a338f494cdfcbfbefa2fa90de58bb175ed3..78b20e66d304cde4a383bf6f91143d89e4bc3e40 100644 (file)
@@ -778,9 +778,9 @@ bool HttpMethod::Configuration(string Message)
    return true;
 }
                                                                        /*}}}*/
    return true;
 }
                                                                        /*}}}*/
-ServerState * HttpMethod::CreateServerState(URI uri)                   /*{{{*/
+std::unique_ptr<ServerState> HttpMethod::CreateServerState(URI const &uri)/*{{{*/
 {
 {
-   return new HttpServerState(uri, this);
+   return std::unique_ptr<ServerState>(new HttpServerState(uri, this));
 }
                                                                        /*}}}*/
 void HttpMethod::RotateDNS()                                           /*{{{*/
 }
                                                                        /*}}}*/
 void HttpMethod::RotateDNS()                                           /*{{{*/
index da6139b0211379c02b2be9f8ba5557d8e0bb973d..e06a046ef688c6cbc24b31bcf8a8e11dc3e2b8aa 100644 (file)
@@ -128,7 +128,7 @@ class HttpMethod : public ServerMethod
 
    virtual bool Configuration(std::string Message) APT_OVERRIDE;
 
 
    virtual bool Configuration(std::string Message) APT_OVERRIDE;
 
-   virtual ServerState * CreateServerState(URI uri) APT_OVERRIDE;
+   virtual std::unique_ptr<ServerState> CreateServerState(URI const &uri) APT_OVERRIDE;
    virtual void RotateDNS() APT_OVERRIDE;
 
    protected:
    virtual void RotateDNS() APT_OVERRIDE;
 
    protected:
index d2ddf6fcfdb204d3ede13915eae10d52223b9de3..432a643031f160327be7dfd22cb6f265020c3858 100644 (file)
@@ -505,9 +505,9 @@ bool HttpsMethod::Configuration(string Message)
    return true;
 }
                                                                        /*}}}*/
    return true;
 }
                                                                        /*}}}*/
-ServerState * HttpsMethod::CreateServerState(URI uri)                  /*{{{*/
+std::unique_ptr<ServerState> HttpsMethod::CreateServerState(URI const &uri)/*{{{*/
 {
 {
-   return new HttpsServerState(uri, this);
+   return std::unique_ptr<ServerState>(new HttpsServerState(uri, this));
 }
                                                                        /*}}}*/
 
 }
                                                                        /*}}}*/
 
index 29b20b9215dd9b7de5c9894bb27624a460281fcb..167107ad66513da54dcdf9801e8f136b88f3b8c3 100644 (file)
@@ -17,6 +17,7 @@
 #include <iostream>
 #include <stddef.h>
 #include <string>
 #include <iostream>
 #include <stddef.h>
 #include <string>
+#include <memory>
 
 #include "server.h"
 
 
 #include "server.h"
 
@@ -67,7 +68,7 @@ class HttpsMethod : public ServerMethod
                                 double ultotal, double ulnow);
    void SetupProxy();
    CURL *curl;
                                 double ultotal, double ulnow);
    void SetupProxy();
    CURL *curl;
-   ServerState *Server;
+   std::unique_ptr<ServerState> Server;
 
    // Used by ServerMethods unused by https
    virtual void SendReq(FetchItem *) APT_OVERRIDE { exit(42); }
 
    // Used by ServerMethods unused by https
    virtual void SendReq(FetchItem *) APT_OVERRIDE { exit(42); }
@@ -77,7 +78,7 @@ class HttpsMethod : public ServerMethod
    FileFd *File;
 
    virtual bool Configuration(std::string Message) APT_OVERRIDE;
    FileFd *File;
 
    virtual bool Configuration(std::string Message) APT_OVERRIDE;
-   virtual ServerState * CreateServerState(URI uri) APT_OVERRIDE;
+   virtual std::unique_ptr<ServerState> CreateServerState(URI const &uri) APT_OVERRIDE;
    using pkgAcqMethod::FetchResult;
    using pkgAcqMethod::FetchItem;
 
    using pkgAcqMethod::FetchResult;
    using pkgAcqMethod::FetchItem;
 
index 1c42c69c28486639e1328569cd8f1727cf7cc32b..934ec2abe6361c04192a31b0f26b7011d19b610f 100644 (file)
@@ -495,10 +495,8 @@ int ServerMethod::Loop()
       
       // Connect to the server
       if (Server == 0 || Server->Comp(Queue->Uri) == false)
       
       // Connect to the server
       if (Server == 0 || Server->Comp(Queue->Uri) == false)
-      {
-        delete Server;
         Server = CreateServerState(Queue->Uri);
         Server = CreateServerState(Queue->Uri);
-      }
+
       /* If the server has explicitly said this is the last connection
          then we pre-emptively shut down the pipeline and tear down 
         the connection. This will speed up HTTP/1.0 servers a tad
       /* If the server has explicitly said this is the last connection
          then we pre-emptively shut down the pipeline and tear down 
         the connection. This will speed up HTTP/1.0 servers a tad
@@ -515,8 +513,7 @@ int ServerMethod::Loop()
       if (Server->Open() == false)
       {
         Fail(true);
       if (Server->Open() == false)
       {
         Fail(true);
-        delete Server;
-        Server = 0;
+        Server = nullptr;
         continue;
       }
 
         continue;
       }
 
@@ -748,9 +745,7 @@ int ServerMethod::Loop()
    return 0;
 }
                                                                        /*}}}*/
    return 0;
 }
                                                                        /*}}}*/
-                                                                       /*{{{*/
-unsigned long long
-ServerMethod::FindMaximumObjectSizeInQueue() const 
+unsigned long long ServerMethod::FindMaximumObjectSizeInQueue() const  /*{{{*/
 {
    unsigned long long MaxSizeInQueue = 0;
    for (FetchItem *I = Queue; I != 0 && I != QueueBack; I = I->Next)
 {
    unsigned long long MaxSizeInQueue = 0;
    for (FetchItem *I = Queue; I != 0 && I != QueueBack; I = I->Next)
@@ -758,3 +753,9 @@ ServerMethod::FindMaximumObjectSizeInQueue() const
    return MaxSizeInQueue;
 }
                                                                        /*}}}*/
    return MaxSizeInQueue;
 }
                                                                        /*}}}*/
+ServerMethod::ServerMethod(const char *Ver,unsigned long Flags) :      /*{{{*/
+   pkgAcqMethod(Ver, Flags), Server(nullptr), File(NULL), PipelineDepth(10),
+   AllowRedirect(false), Debug(false)
+{
+}
+                                                                       /*}}}*/
index f9f6e907165cb586542f6ca15cea2feeba015e57..5de7686d9a866392cd179b1d47818257a3e428bc 100644 (file)
@@ -17,6 +17,7 @@
 #include <time.h>
 #include <iostream>
 #include <string>
 #include <time.h>
 #include <iostream>
 #include <string>
+#include <memory>
 
 using std::cout;
 using std::endl;
 
 using std::cout;
 using std::endl;
@@ -108,7 +109,7 @@ class ServerMethod : public pkgAcqMethod
    protected:
    virtual bool Fetch(FetchItem *) APT_OVERRIDE;
 
    protected:
    virtual bool Fetch(FetchItem *) APT_OVERRIDE;
 
-   ServerState *Server;
+   std::unique_ptr<ServerState> Server;
    std::string NextURI;
    FileFd *File;
 
    std::string NextURI;
    FileFd *File;
 
@@ -152,10 +153,10 @@ class ServerMethod : public pkgAcqMethod
    int Loop();
 
    virtual void SendReq(FetchItem *Itm) = 0;
    int Loop();
 
    virtual void SendReq(FetchItem *Itm) = 0;
-   virtual ServerState * CreateServerState(URI uri) = 0;
+   virtual std::unique_ptr<ServerState> CreateServerState(URI const &uri) = 0;
    virtual void RotateDNS() = 0;
 
    virtual void RotateDNS() = 0;
 
-   ServerMethod(const char *Ver,unsigned long Flags = 0) : pkgAcqMethod(Ver, Flags), Server(NULL), File(NULL), PipelineDepth(10), AllowRedirect(false), Debug(false) {};
+   ServerMethod(const char *Ver,unsigned long Flags = 0);
    virtual ~ServerMethod() {};
 };
 
    virtual ~ServerMethod() {};
 };