Explorar el Código

Fix crash with empty architecture list

If the architecture list is empty somehow, fail normally.

LP: #1549819
Julian Andres Klode hace 10 años
padre
commit
9de2fd4d11
Se han modificado 2 ficheros con 19 adiciones y 4 borrados
  1. 6 4
      apt-pkg/pkgcache.cc
  2. 13 0
      test/integration/test-ubuntu-bug-1549819-empty-arch-list

+ 6 - 4
apt-pkg/pkgcache.cc

@@ -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());

+ 13 - 0
test/integration/test-ubuntu-bug-1549819-empty-arch-list

@@ -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