* apt-pkg/policy.cc:
authorDavid Kalnischkies <kalnischkies@gmail.com>
Wed, 29 Jun 2011 20:38:59 +0000 (22:38 +0200)
committerDavid Kalnischkies <kalnischkies@gmail.com>
Wed, 29 Jun 2011 20:38:59 +0000 (22:38 +0200)
  - do not segfault in pinning if a package with this name doesn't exist.
    Thanks to Ferdinand Thommes for the report!

apt-pkg/policy.cc
debian/changelog
test/integration/test-pin-non-existent-package [new file with mode: 0755]

index 2cc2e5e..291d83c 100644 (file)
@@ -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))
    {
index 5c21cc4..e527142 100644 (file)
@@ -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 (executable)
index 0000000..1031272
--- /dev/null
@@ -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