diff options
-rw-r--r-- | apt-pkg/deb/dpkgpm.cc | 1 | ||||
-rw-r--r-- | apt-pkg/depcache.cc | 2 | ||||
-rw-r--r-- | apt-private/private-install.h | 3 | ||||
-rw-r--r-- | debian/changelog | 3 | ||||
-rwxr-xr-x | test/integration/test-bug-709560-set-candidate-release | 36 |
5 files changed, 44 insertions, 1 deletions
diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index 8ab0c74c6..918fb32e5 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -1529,6 +1529,7 @@ bool pkgDPkgPM::GoNoABIBreak(APT::Progress::PackageManager *progress) if(stopOnError) { CloseLog(); + StopPtyMagic(); d->progress->Stop(); return false; } diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index a06789cdf..f9c891c86 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -1522,7 +1522,7 @@ bool pkgDepCache::SetCandidateRelease(pkgCache::VerIterator TargetVer, if (itsFine == false) { // change the candidate - Changed.push_back(make_pair(oldCand, TargetVer)); + Changed.push_back(make_pair(V, TargetVer)); if (SetCandidateRelease(V, TargetRel, Changed) == false) { if (stillOr == false) diff --git a/apt-private/private-install.h b/apt-private/private-install.h index 439c89712..2187146d3 100644 --- a/apt-private/private-install.h +++ b/apt-private/private-install.h @@ -95,6 +95,9 @@ struct TryToInstall { Cache->GetDepCache()->SetCandidateVersion(s->first); bool Success = true; + // the Changed list contains: + // first: "new version" + // second: "what-caused the change" std::list<std::pair<pkgCache::VerIterator, pkgCache::VerIterator> > Changed; for (std::list<std::pair<pkgCache::VerIterator, std::string> >::const_iterator s = start.begin(); s != start.end(); ++s) diff --git a/debian/changelog b/debian/changelog index 246102a02..45ee59a51 100644 --- a/debian/changelog +++ b/debian/changelog @@ -2,6 +2,9 @@ apt (0.9.13.1~ubuntu2) UNRELEASED; urgency=low * add autopkgtest support for the integration testsuite * merge mvo/feature/edit-sources + * merge mvo/feature/edit-sources + * fix segfault in pkgDepCache::SetCandidateRelease() (closes: #709560) + * reset terminal on error (closes: #730795) -- Michael Vogt <michael.vogt@ubuntu.com> Fri, 29 Nov 2013 14:37:36 +0100 diff --git a/test/integration/test-bug-709560-set-candidate-release b/test/integration/test-bug-709560-set-candidate-release new file mode 100755 index 000000000..48dc5c382 --- /dev/null +++ b/test/integration/test-bug-709560-set-candidate-release @@ -0,0 +1,36 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'amd64' + +insertpackage 'experimental' 'foo' 'all' '2.0' 'Depends: foo-dep (= 2.1)' +insertpackage 'experimental' 'foo-dep' 'all' '2.1' + + +( +cat <<EOF +Package: * +Pin: release a=experimental +Pin-Priority: -10 +EOF +) > rootdir/etc/apt/preferences + + +setupaptarchive + +testequal "Reading package lists... +Building dependency tree... +Selected version '2.0' (experimental [all]) for 'foo' +Selected version '2.1' (experimental [all]) for 'foo-dep' because of 'foo' +The following extra packages will be installed: + foo-dep +The following NEW packages will be installed: + foo foo-dep +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst foo-dep (2.1 experimental [all]) +Inst foo (2.0 experimental [all]) +Conf foo-dep (2.1 experimental [all]) +Conf foo (2.0 experimental [all])" aptget install -q0 -s foo/experimental |