]> git.saurik.com Git - apt.git/commitdiff
pkgcachegen: Account for remapping when parsing depends from NewPackage
authorJulian Andres Klode <jak@debian.org>
Wed, 26 Aug 2015 21:26:54 +0000 (23:26 +0200)
committerJulian Andres Klode <jak@debian.org>
Thu, 27 Aug 2015 09:05:12 +0000 (11:05 +0200)
In both the Ver and Dep variables, we need to account for remapping,
as otherwise we would still reference the old bug.

Reproduction environment:

* An i386 system with amd64 foreign architecture
* A sources.list with
deb http://snapshot.debian.org/archive/debian/20150826T102846Z/ unstable main
deb http://snapshot.debian.org/archive/debian/20150826T102846Z/ experimental main

Thanks: Jakub Wilk for the bug report and the backtraces
Closes: #796999
apt-pkg/pkgcachegen.cc

index 6daebbc2aff75c7a5a8c910150ce73b581123058..3cbb96a6b49fdd7785feefa4f4696ef4366abdea 100644 (file)
@@ -594,8 +594,10 @@ bool pkgCacheGenerator::NewPackage(pkgCache::PkgIterator &Pkg,const string &Name
       // and negative dependencies, don't forget negative dependencies
       {
         pkgCache::PkgIterator const M = Grp.FindPreferredPkg(false);
-        if (M.end() == false)
-           for (pkgCache::DepIterator Dep = M.RevDependsList(); Dep.end() == false; ++Dep)
+        if (M.end() == false) {
+           pkgCache::DepIterator Dep;
+           Dynamic<pkgCache::DepIterator> DynDep(Dep);
+           for (Dep = M.RevDependsList(); Dep.end() == false; ++Dep)
            {
               if ((Dep->CompareOp & (pkgCache::Dep::ArchSpecific | pkgCache::Dep::MultiArchImplicit)) != 0)
                  continue;
@@ -603,10 +605,12 @@ bool pkgCacheGenerator::NewPackage(pkgCache::PkgIterator &Pkg,const string &Name
                     Dep->Type != pkgCache::Dep::Replaces)
                  continue;
               pkgCache::VerIterator Ver = Dep.ParentVer();
+              Dynamic<pkgCache::VerIterator> DynVer(Ver);
               map_pointer_t * unused = NULL;
               if (NewDepends(Pkg, Ver, Dep->Version, Dep->CompareOp, Dep->Type, unused) == false)
                  return false;
            }
+        }
       }
 
       // this package is the new last package