I think I see the problem; I forgot that PkgFileIterator::Archive can return NULL (I suppose this is to handle packages from archives without a Release file?). The attached patch fixes this crash and a similar one in 'aptitude show'.
Daniel -- /------------------- Daniel Burrows <[EMAIL PROTECTED]> ------------------\ | Voodoo Programming: Things programmers do | | that they know shouldn't work but they try | | anyway, and which sometimes actually work, | | such as recompiling everything. | \--------------------- A duck! -- http://www.python.org --------------------/
Index: src/cmdline/cmdline_show.cc
===================================================================
--- src/cmdline/cmdline_show.cc (revision 3386)
+++ src/cmdline/cmdline_show.cc (working copy)
@@ -114,7 +114,12 @@
vector<fragment *> fragments;
for( ; !vf.end(); ++vf)
- fragments.push_back(text_fragment(vf.File().Archive()));
+ {
+ if(vf.File().Archive() == 0)
+ fragments.push_back(text_fragment(_("<NULL>")));
+ else
+ fragments.push_back(text_fragment(vf.File().Archive()));
+ }
if(fragments.size()==0)
return fragf("");
@@ -296,7 +301,9 @@
if(verbose<2) // Show all archives in a list.
fragments.push_back(archive_lst_frag(ver.FileList(), _("Archive")));
else
- fragments.push_back(fragf("%s: %s%n", _("Archive"), vf.File().Archive()));
+ {
+ fragments.push_back(fragf("%s: %s%n", _("Archive"), vf.File().Archive()?vf.File().Archive():_("<NULL>")));
+ }
}
fragments.push_back(dep_lst_frag(ver.DependsList(),
Index: src/solution_fragment.cc
===================================================================
--- src/solution_fragment.cc (revision 3386)
+++ src/solution_fragment.cc (working copy)
@@ -58,7 +58,12 @@
vector<fragment *> archive_fragments;
for(pkgCache::VerFileIterator vf=v.FileList(); !vf.end(); ++vf)
- archive_fragments.push_back(text_fragment(vf.File().Archive()));
+ {
+ if(vf.File().Archive())
+ archive_fragments.push_back(text_fragment(vf.File().Archive()));
+ else
+ archive_fragments.push_back(text_fragment(_("<NULL>")));
+ }
return join_fragments(archive_fragments, ",");
}
Index: ChangeLog
===================================================================
--- ChangeLog (revision 3391)
+++ ChangeLog (working copy)
@@ -1,3 +1,11 @@
+2005-06-08 Daniel Burrows <[EMAIL PROTECTED]>
+
+ * src/cmdline/cmdline_show.cc, src/solution_fragment.cc:
+
+ Fix several places where aptitude could crash because I forgot
+ that PkgFileIterator::Archive can return a NULL pointer.
+ (Closes: #312553)
+
2005-06-07 Daniel Burrows <[EMAIL PROTECTED]>
* src/vscreen/vs_util.cc:
pgp4vXxIuErRC.pgp
Description: PGP signature

