diff options
author | Julian Andres Klode <jak@debian.org> | 2016-02-25 16:46:42 +0100 |
---|---|---|
committer | Julian Andres Klode <jak@debian.org> | 2016-02-25 16:46:42 +0100 |
commit | 9de2fd4d117e57824f4a0795efa7379995a804cb (patch) | |
tree | acaa850fc728a1fe8ec7768b5999b98bf9845faa | |
parent | 2c53226b72e7e58cdd9b42af46cb3d05da89809e (diff) |
Fix crash with empty architecture list
If the architecture list is empty somehow, fail normally.
LP: #1549819
-rw-r--r-- | apt-pkg/pkgcache.cc | 10 | ||||
-rwxr-xr-x | test/integration/test-ubuntu-bug-1549819-empty-arch-list | 13 |
2 files changed, 19 insertions, 4 deletions
diff --git a/apt-pkg/pkgcache.cc b/apt-pkg/pkgcache.cc index c9c338e1e..503f85657 100644 --- a/apt-pkg/pkgcache.cc +++ b/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()); 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 index 000000000..5e1c6ce7e --- /dev/null +++ b/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 |