From 14cd494a9fa0d6801410bf121beb74ea631d59a6 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Thu, 22 Sep 2005 13:36:39 +0000 Subject: * make sure that the pkgRecords D'tor does not segfault --- apt-pkg/pkgrecords.cc | 5 ++++- apt-pkg/pkgrecords.h | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) (limited to 'apt-pkg') diff --git a/apt-pkg/pkgrecords.cc b/apt-pkg/pkgrecords.cc index 9c2655d6a..1d71d3e2f 100644 --- a/apt-pkg/pkgrecords.cc +++ b/apt-pkg/pkgrecords.cc @@ -42,6 +42,9 @@ pkgRecords::pkgRecords(pkgCache &Cache) : Cache(Cache), Files(0) if (Files[I->ID] == 0) return; } + // We store that to make sure that the destructor won't segfault, + // even if the Cache object was destructed before this instance. + PackageFileCount = Cache.HeaderP->PackageFileCount; } /*}}}*/ // Records::~pkgRecords - Destructor /*{{{*/ @@ -49,7 +52,7 @@ pkgRecords::pkgRecords(pkgCache &Cache) : Cache(Cache), Files(0) /* */ pkgRecords::~pkgRecords() { - for (unsigned I = 0; I != Cache.HeaderP->PackageFileCount; I++) + for (unsigned I = 0; I != PackageFileCount; I++) delete Files[I]; delete [] Files; } diff --git a/apt-pkg/pkgrecords.h b/apt-pkg/pkgrecords.h index 08f004414..f31e83afe 100644 --- a/apt-pkg/pkgrecords.h +++ b/apt-pkg/pkgrecords.h @@ -33,6 +33,7 @@ class pkgRecords pkgCache &Cache; Parser **Files; + int PackageFileCount; public: -- cgit v1.2.3 From ea92d0369e9848714f13a808c0bc8f2e5a53969a Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Wed, 28 Sep 2005 08:11:11 +0000 Subject: * leak fix for debian #250583 --- apt-pkg/contrib/mmap.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/contrib/mmap.cc b/apt-pkg/contrib/mmap.cc index bc22fba67..e395e6cc7 100644 --- a/apt-pkg/contrib/mmap.cc +++ b/apt-pkg/contrib/mmap.cc @@ -155,9 +155,9 @@ DynamicMMap::DynamicMMap(FileFd &F,unsigned long Flags,unsigned long WorkSpace) unsigned long EndOfFile = Fd->Size(); if (EndOfFile > WorkSpace) WorkSpace = EndOfFile; - else + else if(WorkSpace > 0) { - Fd->Seek(WorkSpace); + Fd->Seek(WorkSpace - 1); char C = 0; Fd->Write(&C,sizeof(C)); } -- cgit v1.2.3