From 2f5ed336109d11e06d08bedef6b37d6597c4c09c Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 29 Nov 2013 17:10:35 +0100 Subject: fix crash when SetCandidateRelease is used --- apt-pkg/depcache.cc | 2 +- apt-private/private-install.h | 3 ++ .../test-bug-709560-set-candidate-release | 36 ++++++++++++++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100755 test/integration/test-bug-709560-set-candidate-release 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 > Changed; for (std::list >::const_iterator s = start.begin(); s != start.end(); ++s) 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 < 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 -- cgit v1.2.3 From b12fe5d5ab480f63e2f656a308242a4529f2908b Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 29 Nov 2013 19:54:43 +0100 Subject: update changelog --- debian/changelog | 1 + 1 file changed, 1 insertion(+) diff --git a/debian/changelog b/debian/changelog index 8d7936da2..505a690f6 100644 --- a/debian/changelog +++ b/debian/changelog @@ -10,6 +10,7 @@ apt (0.9.13.1) UNRELEASED; urgency=low * add autopkgtest support for the integration testsuite * merge mvo/feature/short-list * merge mvo/feature/edit-sources + * fix segfault in pkgDepCache::SetCandidateRelease() (closes: #709560) -- Michael Vogt Thu, 28 Nov 2013 20:02:39 +0100 -- cgit v1.2.3 From 804d195655c48a448d576b2b196d18c2c816e824 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 29 Nov 2013 20:08:56 +0100 Subject: reset terminal on error (closes: #730795) --- apt-pkg/deb/dpkgpm.cc | 1 + debian/changelog | 1 + 2 files changed, 2 insertions(+) diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index 01c6242dc..49396c1c7 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -1530,6 +1530,7 @@ bool pkgDPkgPM::GoNoABIBreak(APT::Progress::PackageManager *progress) if(stopOnError) { CloseLog(); + StopPtyMagic(); d->progress->Stop(); return false; } diff --git a/debian/changelog b/debian/changelog index 505a690f6..5522f4c4e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -11,6 +11,7 @@ apt (0.9.13.1) UNRELEASED; urgency=low * merge mvo/feature/short-list * merge mvo/feature/edit-sources * fix segfault in pkgDepCache::SetCandidateRelease() (closes: #709560) + * reset terminal on error (closes: #730795) -- Michael Vogt Thu, 28 Nov 2013 20:02:39 +0100 -- cgit v1.2.3