]> git.saurik.com Git - apt.git/commitdiff
ensure that we do init d only once and especially not with its own
authorDavid Kalnischkies <kalnischkies@gmail.com>
Wed, 9 May 2012 20:05:18 +0000 (22:05 +0200)
committerDavid Kalnischkies <kalnischkies@gmail.com>
Wed, 9 May 2012 20:05:18 +0000 (22:05 +0200)
content as this causes some "interesting" hickups resulting in segfaults
as it seems (Closes: #554387, #670979)

apt-pkg/contrib/fileutl.cc
debian/changelog

index 1cf2253298929df90888ce97fa30b93c5bc19fbb..14c0b561fb9b948dcfcfaa21186c37be8be2f81a 100644 (file)
@@ -905,8 +905,6 @@ bool FileFd::Open(string FileName,unsigned int const Mode,CompressMode Compress,
 bool FileFd::Open(string FileName,unsigned int const Mode,APT::Configuration::Compressor const &compressor, unsigned long const Perms)
 {
    Close();
 bool FileFd::Open(string FileName,unsigned int const Mode,APT::Configuration::Compressor const &compressor, unsigned long const Perms)
 {
    Close();
-   d = new FileFdPrivate;
-   d->openmode = Mode;
    Flags = AutoClose;
 
    if ((Mode & WriteOnly) != WriteOnly && (Mode & (Atomic | Create | Empty | Exclusive)) != 0)
    Flags = AutoClose;
 
    if ((Mode & WriteOnly) != WriteOnly && (Mode & (Atomic | Create | Empty | Exclusive)) != 0)
@@ -1000,8 +998,6 @@ bool FileFd::OpenDescriptor(int Fd, unsigned int const Mode, CompressMode Compre
 bool FileFd::OpenDescriptor(int Fd, unsigned int const Mode, APT::Configuration::Compressor const &compressor, bool AutoClose)
 {
    Close();
 bool FileFd::OpenDescriptor(int Fd, unsigned int const Mode, APT::Configuration::Compressor const &compressor, bool AutoClose)
 {
    Close();
-   d = new FileFdPrivate;
-   d->openmode = Mode;
    Flags = (AutoClose) ? FileFd::AutoClose : 0;
    iFd = Fd;
    this->FileName = "";
    Flags = (AutoClose) ? FileFd::AutoClose : 0;
    iFd = Fd;
    this->FileName = "";
@@ -1015,7 +1011,12 @@ bool FileFd::OpenDescriptor(int Fd, unsigned int const Mode, APT::Configuration:
 }
 bool FileFd::OpenInternDescriptor(unsigned int const Mode, APT::Configuration::Compressor const &compressor)
 {
 }
 bool FileFd::OpenInternDescriptor(unsigned int const Mode, APT::Configuration::Compressor const &compressor)
 {
-   d->compressor = compressor;
+   if (d == NULL)
+   {
+      d = new FileFdPrivate();
+      d->openmode = Mode;
+      d->compressor = compressor;
+   }
    if (compressor.Name == "." || compressor.Binary.empty() == true)
       return true;
 #ifdef HAVE_ZLIB
    if (compressor.Name == "." || compressor.Binary.empty() == true)
       return true;
 #ifdef HAVE_ZLIB
index b0c74ea31188e26b61c6ad5618863226a4ba90f7..6b9ba6769363fbd59e98f2f7f386975c4805162e 100644 (file)
@@ -40,6 +40,9 @@ apt (0.9.3) UNRELEASED; urgency=low
       for the report. (Closes: #671721)
   * apt-pkg/contrib/fileutl.cc:
     - check that the fd which are closed are valid
       for the report. (Closes: #671721)
   * apt-pkg/contrib/fileutl.cc:
     - check that the fd which are closed are valid
+    - ensure that we do init d only once and especially not with its own
+      content as this causes some "interesting" hickups resulting in segfaults
+      as it seems (Closes: #554387, #670979)
   * apt-pkg/aptconfiguration.cc:
     - use NULL instead of "" for no (un)compress parameters
 
   * apt-pkg/aptconfiguration.cc:
     - use NULL instead of "" for no (un)compress parameters