Browse Source

fix crash when SetCandidateRelease is used

debian/1.8.y
Michael Vogt 8 years ago
parent
commit
2f5ed33610
  1. 2
      apt-pkg/depcache.cc
  2. 3
      apt-private/private-install.h
  3. 36
      test/integration/test-bug-709560-set-candidate-release

2
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)

3
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)

36
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
Loading…
Cancel
Save