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/ slanga...@ubuntu.com vor...@debian.org
# Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: steve.langa...@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: bubu...@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 <bubu...@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=
signature.asc
Description: Digital signature