[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#614298: multiarch: apt-get remove of foreign-arch package removes wrong one



tags 614298 patch
thanks

Hi David,

Please find attached a tentative patch for this issue.  It's not exactly the
most elegant, but it seemed to be the best we can do without changing the
libapt ABI.  If you prefer a different solution, please let me know and I
can give it a try.

-- 
Steve Langasek                   Give me a lever long enough and a Free OS
Debian Developer                   to set it on, and I can move the world.
Ubuntu Developer                                    http://www.debian.org/
slangasek@ubuntu.com                                     vorlon@debian.org
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: steve.langasek@linaro.org-20110306043047-\
#   t5brj8ug8jjf8r0j
# target_branch: bzr+ssh://bzr.debian.org/bzr/apt/debian-sid/
# testament_sha1: 7dfd5db21b8c7d51ddd58754958de24db9ff06b0
# timestamp: 2011-03-05 20:33:38 -0800
# base_revision_id: bubulle@debian.org-20110224183912-4l7923vitatsftfg
# 
# Begin patch
=== modified file 'apt-pkg/deb/dpkgpm.cc'
--- apt-pkg/deb/dpkgpm.cc	2011-02-03 13:22:32 +0000
+++ apt-pkg/deb/dpkgpm.cc	2011-03-06 04:30:47 +0000
@@ -881,7 +881,10 @@
 
       // Generate the argument list
       const char *Args[MaxArgs + 50];
-      
+      // keep track of allocated strings for multiarch package names
+      char *Packages[MaxArgs + 50];
+      unsigned int pkgcount = 0;
+
       // Now check if we are within the MaxArgs limit
       //
       // this code below is problematic, because it may happen that
@@ -989,13 +992,22 @@
       }      
       else
       {
+	 string const nativeArch = _config->Find("APT::Architecture");
 	 for (;I != J && Size < MaxArgBytes; I++)
 	 {
 	    if((*I).Pkg.end() == true)
 	       continue;
 	    if (I->Op == Item::Configure && disappearedPkgs.find(I->Pkg.Name()) != disappearedPkgs.end())
 	       continue;
-	    Args[n++] = I->Pkg.Name();
+	    if (I->Pkg.Arch() == nativeArch || !strcmp(I->Pkg.Arch(), "all"))
+	       Args[n++] = I->Pkg.Name();
+	    else
+            {
+	       string const PkgDesc = I->Pkg.Name() + string(":") + string(I->Pkg.Arch());
+	       Packages[pkgcount] = new char[PkgDesc.size()+1];
+	       strncpy(Packages[pkgcount++],PkgDesc.c_str(),PkgDesc.size()+1);
+	       Args[n++] = Packages[pkgcount-1];
+            }
 	    Size += strlen(Args[n-1]);
 	 }	 
       }      
@@ -1145,6 +1157,11 @@
       sigemptyset(&sigmask);
       sigprocmask(SIG_BLOCK,&sigmask,&original_sigmask);
 
+      /* clean up the temporary allocation for multiarch package names in
+         the parent, so we don't leak memory when we return. */
+      for (unsigned int i = 0; i < pkgcount; i++)
+	 delete [] Packages[i];
+
       // the result of the waitpid call
       int res;
       int select_ret;

=== modified file 'debian/changelog'
--- debian/changelog	2011-02-24 18:39:12 +0000
+++ debian/changelog	2011-03-06 04:30:47 +0000
@@ -1,10 +1,16 @@
 apt (0.8.11.6) UNRELEASED; urgency=low
 
+  [ Christian Perrier ]
   * Fix error in French translation of manpages (apt_preferences(5)).
     Merci, Rémi Vanicat. Closes: #613689
   * Complete French manpage translation
   * Italian translation update (Milo Casagrande). Closes: #614395
 
+  [ Steve Langasek ]
+  * apt-pkg/deb/dpkgpm.cc: make sure that for multiarch packages, we're
+    passing the full qualified package name to dpkg for removals.
+    Closes: #614298
+
  -- Christian Perrier <bubulle@debian.org>  Fri, 18 Feb 2011 05:53:49 +0100
 
 apt (0.8.11.5) unstable; urgency=low

# Begin bundle
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
/F3JFOFCQsNThaw=

Attachment: signature.asc
Description: Digital signature


Reply to: