diff options
author | Jonathan Thomas <echidnaman@gmail.com> | 2012-11-10 14:25:45 +0100 |
---|---|---|
committer | David Kalnischkies <kalnischkies@gmail.com> | 2012-11-10 14:25:45 +0100 |
commit | 0291f6459b0a8de04268225cc0c88d340ba48653 (patch) | |
tree | cbac4f8cf6bfdaa4074aec24ba234ffa7e42304b | |
parent | b83cad32f1d67fef2dbb12476ed9d3ad8f353db6 (diff) |
* apt-pkg/algorithms.cc:
- fix package-pointer array memory leak in ResolveByKeepInternal()
-rw-r--r-- | apt-pkg/algorithms.cc | 12 | ||||
-rw-r--r-- | debian/changelog | 4 |
2 files changed, 13 insertions, 3 deletions
diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc index b611df172..8cd9d4c6e 100644 --- a/apt-pkg/algorithms.cc +++ b/apt-pkg/algorithms.cc @@ -1419,12 +1419,18 @@ bool pkgProblemResolver::ResolveByKeepInternal() continue; // Restart again. - if (K == LastStop) - return _error->Error("Internal Error, pkgProblemResolver::ResolveByKeep is looping on package %s.",I.FullName(false).c_str()); + if (K == LastStop) { + // I is an iterator based off our temporary package list, + // so copy the name we need before deleting the temporary list + std::string const LoopingPackage = I.FullName(false); + delete[] PList; + return _error->Error("Internal Error, pkgProblemResolver::ResolveByKeep is looping on package %s.", LoopingPackage.c_str()); + } LastStop = K; K = PList - 1; - } + } + delete[] PList; return true; } /*}}}*/ diff --git a/debian/changelog b/debian/changelog index ddbc8de89..e2b0d753e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -21,6 +21,10 @@ apt (0.9.7.7) UNRELEASED; urgency=low - ensure pkgProblemResolver calls MarkDelete without FromUser set so that it can't overrule holds and the protection flag + [ Jonathan Thomas ] + * apt-pkg/algorithms.cc: + - fix package-pointer array memory leak in ResolveByKeepInternal() + -- Jordi Mallach <jordi@debian.org> Thu, 18 Oct 2012 23:30:46 +0200 apt (0.9.7.6) unstable; urgency=low |