]> git.saurik.com Git - apt.git/commitdiff
don't leak on error in listparser creation
authorDavid Kalnischkies <david@kalnischkies.de>
Fri, 25 Mar 2016 12:08:06 +0000 (13:08 +0100)
committerDavid Kalnischkies <david@kalnischkies.de>
Sun, 3 Apr 2016 12:44:47 +0000 (14:44 +0200)
Git-Dch: Ignore
Reported-By: gcc -fsanitize=address
apt-pkg/deb/debindexfile.cc
apt-pkg/indexfile.cc

index 84dabc06b374535968ad88baa514683fc64866cc..9be2db4c95667a16035ae9bfcf26c0ff547ba1b9 100644 (file)
@@ -121,12 +121,18 @@ std::string debTranslationsIndex::GetArchitecture() const
 pkgCacheListParser * debTranslationsIndex::CreateListParser(FileFd &Pkg)
 {
    if (Pkg.IsOpen() == false)
 pkgCacheListParser * debTranslationsIndex::CreateListParser(FileFd &Pkg)
 {
    if (Pkg.IsOpen() == false)
-      return NULL;
+      return nullptr;
    _error->PushToStack();
    pkgCacheListParser * const Parser = new debTranslationsParser(&Pkg);
    bool const newError = _error->PendingError();
    _error->MergeWithStack();
    _error->PushToStack();
    pkgCacheListParser * const Parser = new debTranslationsParser(&Pkg);
    bool const newError = _error->PendingError();
    _error->MergeWithStack();
-   return newError ? NULL : Parser;
+   if (newError)
+   {
+      delete Parser;
+      return nullptr;
+   }
+   else
+      return Parser;
 }
                                                                        /*}}}*/
 // dpkg/status Index                                                   /*{{{*/
 }
                                                                        /*}}}*/
 // dpkg/status Index                                                   /*{{{*/
@@ -149,12 +155,18 @@ uint8_t debStatusIndex::GetIndexFlags() const
 pkgCacheListParser * debStatusIndex::CreateListParser(FileFd &Pkg)
 {
    if (Pkg.IsOpen() == false)
 pkgCacheListParser * debStatusIndex::CreateListParser(FileFd &Pkg)
 {
    if (Pkg.IsOpen() == false)
-      return NULL;
+      return nullptr;
    _error->PushToStack();
    pkgCacheListParser * const Parser = new debStatusListParser(&Pkg);
    bool const newError = _error->PendingError();
    _error->MergeWithStack();
    _error->PushToStack();
    pkgCacheListParser * const Parser = new debStatusListParser(&Pkg);
    bool const newError = _error->PendingError();
    _error->MergeWithStack();
-   return newError ? NULL : Parser;
+   if (newError)
+   {
+      delete Parser;
+      return nullptr;
+   }
+   else
+      return Parser;
 }
                                                                        /*}}}*/
 // DebPkgFile Index - a single .deb file as an index                   /*{{{*/
 }
                                                                        /*}}}*/
 // DebPkgFile Index - a single .deb file as an index                   /*{{{*/
@@ -225,12 +237,18 @@ bool debDebPkgFileIndex::OpenListFile(FileFd &Pkg, std::string const &FileName)
 pkgCacheListParser * debDebPkgFileIndex::CreateListParser(FileFd &Pkg)
 {
    if (Pkg.IsOpen() == false)
 pkgCacheListParser * debDebPkgFileIndex::CreateListParser(FileFd &Pkg)
 {
    if (Pkg.IsOpen() == false)
-      return NULL;
+      return nullptr;
    _error->PushToStack();
    pkgCacheListParser * const Parser = new debDebFileParser(&Pkg, DebFile);
    bool const newError = _error->PendingError();
    _error->MergeWithStack();
    _error->PushToStack();
    pkgCacheListParser * const Parser = new debDebFileParser(&Pkg, DebFile);
    bool const newError = _error->PendingError();
    _error->MergeWithStack();
-   return newError ? NULL : Parser;
+   if (newError)
+   {
+      delete Parser;
+      return nullptr;
+   }
+   else
+      return Parser;
 }
 uint8_t debDebPkgFileIndex::GetIndexFlags() const
 {
 }
 uint8_t debDebPkgFileIndex::GetIndexFlags() const
 {
index 657cdfb365dc64fecbcd2105f77ab5d6169fafc8..894671bae2242feb564f9ea3e80888b4c351eda3 100644 (file)
@@ -325,12 +325,18 @@ pkgDebianIndexFile::~pkgDebianIndexFile()
 pkgCacheListParser * pkgDebianIndexFile::CreateListParser(FileFd &Pkg)
 {
    if (Pkg.IsOpen() == false)
 pkgCacheListParser * pkgDebianIndexFile::CreateListParser(FileFd &Pkg)
 {
    if (Pkg.IsOpen() == false)
-      return NULL;
+      return nullptr;
    _error->PushToStack();
    pkgCacheListParser * const Parser = new debListParser(&Pkg);
    bool const newError = _error->PendingError();
    _error->MergeWithStack();
    _error->PushToStack();
    pkgCacheListParser * const Parser = new debListParser(&Pkg);
    bool const newError = _error->PendingError();
    _error->MergeWithStack();
-   return newError ? NULL : Parser;
+   if (newError)
+   {
+      delete Parser;
+      return nullptr;
+   }
+   else
+      return Parser;
 }
 bool pkgDebianIndexFile::Merge(pkgCacheGenerator &Gen,OpProgress * const Prog)
 {
 }
 bool pkgDebianIndexFile::Merge(pkgCacheGenerator &Gen,OpProgress * const Prog)
 {