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

Daniel Burrows dburrows@costa.debian.org
Fri, 08 Apr 2005 01:03:16 +0000


Author: dburrows
Date: Fri Apr  8 01:03:14 2005
New Revision: 2939

Modified:
   branches/aptitude-0.3/aptitude/ChangeLog
   branches/aptitude-0.3/aptitude/src/generic/problemresolver/problemresolver.h
   branches/aptitude-0.3/aptitude/src/generic/problemresolver/test.cc
Log:
Fix the evil (and incredibly stupid) segfault.

Modified: branches/aptitude-0.3/aptitude/ChangeLog
==============================================================================
--- branches/aptitude-0.3/aptitude/ChangeLog	(original)
+++ branches/aptitude-0.3/aptitude/ChangeLog	Fri Apr  8 01:03:14 2005
@@ -2,6 +2,11 @@
 
 	* src/generic/problemresolver/problemresolver.h, src/generic/problemresolver/test.cc:
 
+	  Fix the segfault by adding the missing "&", and tweak the output
+	  code a bit.
+
+	* src/generic/problemresolver/problemresolver.h, src/generic/problemresolver/test.cc:
+
 	  Add some debugging code to try to track down the current
 	  segfault.
 

Modified: branches/aptitude-0.3/aptitude/src/generic/problemresolver/problemresolver.h
==============================================================================
--- branches/aptitude-0.3/aptitude/src/generic/problemresolver/problemresolver.h	(original)
+++ branches/aptitude-0.3/aptitude/src/generic/problemresolver/problemresolver.h	Fri Apr  8 01:03:14 2005
@@ -344,7 +344,7 @@
      *  in this solution.  The list will live at least as long as
      *  the reference from which it was retrieved.
      */
-    const std::vector<dep> get_broken() const
+    const std::vector<dep> &get_broken() const
     {
       return real_soln->get_broken_deps();
     }
@@ -679,7 +679,7 @@
 
 	for(typename std::vector<dep>::const_iterator i=s.get_broken().begin();
 	    i!=s.get_broken().end(); ++i)
-	  std::cout << *i;
+	  std::cout << *i << ", ";
 
 	std::cout << " ], score " << s.get_score() << std::endl;
 

Modified: branches/aptitude-0.3/aptitude/src/generic/problemresolver/test.cc
==============================================================================
--- branches/aptitude-0.3/aptitude/src/generic/problemresolver/test.cc	(original)
+++ branches/aptitude-0.3/aptitude/src/generic/problemresolver/test.cc	Fri Apr  8 01:03:14 2005
@@ -101,6 +101,8 @@
 
   /** The ID of this version. */
   unsigned int ID;
+
+  dummy_package(const dummy_package &other);
 public:
   typedef vector<dummy_version *>::const_iterator version_iterator;
 
@@ -154,6 +156,8 @@
 
   /** The numerical ID of this version. */
   int ID;
+
+  dummy_version(const dummy_version &other);
 public:
   typedef vector<dummy_dep *>::const_iterator revdep_iterator;
 
@@ -219,6 +223,8 @@
 {
   const dummy_version *source;
   vector<dummy_version *> target_set;
+
+  dummy_dep(const dummy_dep &other);
 public:
   typedef vector<dummy_version *>::const_iterator solver_iterator;
 
@@ -390,6 +396,10 @@
       :real_dep(_real_dep)
     {
     }
+    dep(const dep &other)
+      :real_dep(other.real_dep)
+    {
+    }
 
     typedef wrap_ptr_iter<dummy_version, version> solver_iterator;
 
@@ -447,6 +457,7 @@
 
     const dep operator*() const
     {
+      assert(realiter!=realend);
       return *realiter;
     }
 
@@ -593,7 +604,7 @@
   for(dummy_resolver::dep::solver_iterator i=d.solvers_begin();
       i!=d.solvers_end(); ++i)
     out << (*i).get_name() << ", ";
-  out << "}, ";
+  out << "}";
 
   return out;
 }