Просмотр исходного кода

* 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 лет назад: 15
Родитель
Сommit
5b7d1ee675
3 измененных файлов с 51 добавлено и 1 удалено
  1. 3 0
      apt-pkg/policy.cc
  2. 4 1
      debian/changelog
  3. 44 0
      test/integration/test-pin-non-existent-package

+ 3 - 0
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))
    {

+ 4 - 1
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
 

+ 44 - 0
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