summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Kalnischkies <kalnischkies@gmail.com>2011-06-29 22:38:59 +0200
committerDavid Kalnischkies <kalnischkies@gmail.com>2011-06-29 22:38:59 +0200
commit5b7d1ee67575e311871fb73be421ea7fd2f6fd73 (patch)
treec045fd2e2c158e408e04d56e88cc726bae8539a6
parent9919af907aef04caa4061e411259525e46eb49e2 (diff)
* apt-pkg/policy.cc:
- do not segfault in pinning if a package with this name doesn't exist. Thanks to Ferdinand Thommes for the report!
-rw-r--r--apt-pkg/policy.cc3
-rw-r--r--debian/changelog5
-rwxr-xr-xtest/integration/test-pin-non-existent-package44
3 files changed, 51 insertions, 1 deletions
diff --git a/apt-pkg/policy.cc b/apt-pkg/policy.cc
index 2cc2e5e39..291d83c67 100644
--- a/apt-pkg/policy.cc
+++ b/apt-pkg/policy.cc
@@ -231,6 +231,9 @@ void pkgPolicy::CreatePin(pkgVersionMatch::MatchType Type,string Name,
// Get a spot to put the pin
pkgCache::GrpIterator Grp = Cache->FindGrp(Name);
+ if (Grp.end() == true)
+ return;
+
for (pkgCache::PkgIterator Pkg = Grp.PackageList();
Pkg.end() != true; Pkg = Grp.NextPkg(Pkg))
{
diff --git a/debian/changelog b/debian/changelog
index 5c21cc4e5..e527142c4 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -11,8 +11,11 @@ apt (0.8.15.1) unstable; urgency=low
- forgot 'mips' in the list for all architecture dependent symbols
- comment out gcc-4.5 specific symbols as gcc-4.6 is now default
- the symbol for PrintStatus() is architecture dependent
+ * apt-pkg/policy.cc:
+ - do not segfault in pinning if a package with this name doesn't exist.
+ Thanks to Ferdinand Thommes for the report!
- -- David Kalnischkies <kalnischkies@gmail.com> Wed, 29 Jun 2011 18:46:06 +0200
+ -- David Kalnischkies <kalnischkies@gmail.com> Wed, 29 Jun 2011 22:05:50 +0200
apt (0.8.15) unstable; urgency=low
diff --git a/test/integration/test-pin-non-existent-package b/test/integration/test-pin-non-existent-package
new file mode 100755
index 000000000..1031272e2
--- /dev/null
+++ b/test/integration/test-pin-non-existent-package
@@ -0,0 +1,44 @@
+#!/bin/sh
+set -e
+
+TESTDIR=$(readlink -f $(dirname $0))
+. $TESTDIR/framework
+setupenvironment
+configarchitecture "i386"
+
+insertpackage 'unstable' 'apt' 'i386' '0.8.15'
+
+setupaptarchive
+
+testcandidate() {
+ msgtest "Test that the Candidate for $1 is" $2
+ test "$(aptcache policy $1 | grep '^ Candidate:')" = " Candidate: $2" && msgpass || msgfail
+}
+
+testcandidate apt '0.8.15'
+testequal 'N: Unable to locate package doesntexist' aptcache policy doesntexist -q=0
+testequal 'Reading package lists...
+Building dependency tree...
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' aptget dist-upgrade
+
+echo 'Package: apt
+Pin: release a=unstable
+Pin-Priority: -1' > rootdir/etc/apt/preferences
+
+testcandidate apt '(none)'
+testequal 'N: Unable to locate package doesntexist' aptcache policy doesntexist -q=0
+testequal 'Reading package lists...
+Building dependency tree...
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' aptget dist-upgrade
+
+echo '
+Package: doesntexist
+Pin: release a=unstable
+Pin-Priority: 1000' >> rootdir/etc/apt/preferences
+
+testcandidate apt '(none)'
+testequal 'N: Unable to locate package doesntexist' aptcache policy doesntexist -q=0
+
+testequal 'Reading package lists...
+Building dependency tree...
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' aptget dist-upgrade