[Aptitude-devel] r2966 - in branches/aptitude-0.3/aptitude: . src/generic/problemresolver

Daniel Burrows dburrows@costa.debian.org
Sat, 09 Apr 2005 15:24:13 +0000


Author: dburrows
Date: Sat Apr  9 15:24:10 2005
New Revision: 2966

Modified:
   branches/aptitude-0.3/aptitude/ChangeLog
   branches/aptitude-0.3/aptitude/src/generic/problemresolver/aptitude_resolver.h
Log:
Fix the solver_iterator-related crashes.

Modified: branches/aptitude-0.3/aptitude/ChangeLog
==============================================================================
--- branches/aptitude-0.3/aptitude/ChangeLog	(original)
+++ branches/aptitude-0.3/aptitude/ChangeLog	Sat Apr  9 15:24:10 2005
@@ -2,6 +2,12 @@
 
 	* src/generic/problemresolver/aptitude_resolver.h:
 
+	  Assert that dep_lst is non-end BEFORE possibly pushing it off
+	  the end, make dep_lst's end-ness part of the end() condition for
+	  solver_iterators, and test against end() instead of finished.
+
+	* src/generic/problemresolver/aptitude_resolver.h:
+
 	  Fix the dep_iterator to iterate over all dependencies instead of
 	  none.
 

Modified: branches/aptitude-0.3/aptitude/src/generic/problemresolver/aptitude_resolver.h
==============================================================================
--- branches/aptitude-0.3/aptitude/src/generic/problemresolver/aptitude_resolver.h	(original)
+++ branches/aptitude-0.3/aptitude/src/generic/problemresolver/aptitude_resolver.h	Sat Apr  9 15:24:10 2005
@@ -398,7 +398,7 @@
   solver_iterator &operator++()
   {
     // Note that we're OK as long as dependencies last.
-    while(!finished)
+    while(!end())
       {
 	// First, advance whatever needs to be advanced next in the
 	// sub-list.
@@ -431,9 +431,9 @@
 	  finished=true;
 	else
 	  {
-	    ++dep_lst;
 	    // Since we aren't finished, dep_lst should be valid.
 	    assert(!dep_lst.end());
+	    ++dep_lst;
 	    ver_lst=dep_lst.TargetPkg().VersionList();
 	    prv_lst=dep_lst.TargetPkg().ProvidesList();
 	  }
@@ -442,7 +442,7 @@
 
   aptitude_resolver_version operator*() const
   {
-    assert(!finished);
+    assert(!end());
 
     if(!ver_lst.end())
       return aptitude_resolver_version(ver_lst.ParentPkg(),ver_lst);
@@ -450,9 +450,9 @@
       return aptitude_resolver_version(const_cast<pkgCache::PrvIterator &>(prv_lst).OwnerPkg(),const_cast<pkgCache::PrvIterator &>(prv_lst).OwnerVer());
   }
 
-  bool end()
+  bool end() const
   {
-    return finished;
+    return finished || dep_lst.end();
   }
 };