]> git.saurik.com Git - apt.git/commitdiff
Fix crash with empty architecture list
authorJulian Andres Klode <jak@debian.org>
Thu, 25 Feb 2016 15:46:42 +0000 (16:46 +0100)
committerJulian Andres Klode <jak@debian.org>
Thu, 25 Feb 2016 15:46:42 +0000 (16:46 +0100)
If the architecture list is empty somehow, fail normally.

LP: #1549819

apt-pkg/pkgcache.cc
test/integration/test-ubuntu-bug-1549819-empty-arch-list [new file with mode: 0755]

index c9c338e1eff3370550a18d1072a91b0d4883385f..503f856570320bae49821d42103a9f60c378ea2b 100644 (file)
@@ -184,10 +184,12 @@ bool pkgCache::ReMap(bool const &Errorchecks)
 
    // Check the architecture
    std::vector<std::string> archs = APT::Configuration::getArchitectures();
-   std::vector<std::string>::const_iterator a = archs.begin();
-   std::string list = *a;
-   for (++a; a != archs.end(); ++a)
-      list.append(",").append(*a);
+   std::string list = "";
+   for (auto const & arch : archs) {
+      if (!list.empty())
+         list.append(",");
+      list.append(arch);
+   }
    if (_config->Find("APT::Architecture") != StrP + HeaderP->Architecture ||
         list != StrP + HeaderP->GetArchitectures())
       return _error->Error(_("The package cache was built for different architectures: %s vs %s"), StrP + HeaderP->GetArchitectures(), list.c_str());
diff --git a/test/integration/test-ubuntu-bug-1549819-empty-arch-list b/test/integration/test-ubuntu-bug-1549819-empty-arch-list
new file mode 100755 (executable)
index 0000000..5e1c6ce
--- /dev/null
@@ -0,0 +1,13 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture ""
+echo 'APT::Architecture "";' > rootdir/etc/apt/apt.conf
+echo 'APT::Architectures:: "";' >> rootdir/etc/apt/apt.conf
+setupaptarchive
+
+# test success
+testsuccess aptcache -c rootdir/etc/apt/apt.conf gencaches -o debug::NoLocking=1