summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apt-pkg/policy.cc18
-rw-r--r--debian/changelog4
2 files changed, 19 insertions, 3 deletions
diff --git a/apt-pkg/policy.cc b/apt-pkg/policy.cc
index 029a37df7..e813a0903 100644
--- a/apt-pkg/policy.cc
+++ b/apt-pkg/policy.cc
@@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
-// $Id: policy.cc,v 1.2 2001/02/20 07:03:17 jgg Exp $
+// $Id: policy.cc,v 1.3 2001/03/03 23:27:24 jgg Exp $
/* ######################################################################
Package Version Policy implementation
@@ -145,9 +145,23 @@ pkgCache::VerIterator pkgPolicy::GetCandidateVer(pkgCache::PkgIterator Pkg)
pin that stays at that setting.
*/
for (pkgCache::VerIterator Ver = Pkg.VersionList(); Ver.end() == false; Ver++)
- {
+ {
+ /* This is a side effect of the condition below, and is added for
+ completeness, though it should not be necessary */
+ if (Ver->Arch == 0)
+ continue;
+
for (pkgCache::VerFileIterator VF = Ver.FileList(); VF.end() == false; VF++)
{
+ /* If this is the status file, and the current version is not the
+ version in the status file (ie it is not installed, or somesuch)
+ then it is not a candidate for installation, ever. This weeds
+ out bogus entries that may be due to config-file states, or
+ other. */
+ if ((VF.File()->Flags & pkgCache::Flag::NotSource) == pkgCache::Flag::NotSource &&
+ Pkg.CurrentVer() != Ver)
+ continue;
+
signed Prio = PFPriority[VF.File()->ID];
if (Prio > Max)
{
diff --git a/debian/changelog b/debian/changelog
index 86d495815..3199cfb74 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -15,7 +15,9 @@ apt (0.5.1) unstable; urgency=low
* apt-extracttemplates moved from debconf into apt-utils
* s390 archtable entry. Closes: #88232
* Dan's segfault
-
+ * Some instances where the status file can source a package in a
+ non-sensical way. Closes: #87390
+
-- Jason Gunthorpe <jgg@debian.org> Thu, 22 Feb 2001 00:39:15 -0500
apt (0.5.0) unstable; urgency=low