summaryrefslogtreecommitdiff
path: root/apt-private/private-cacheset.cc
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2016-05-20 09:37:24 +0200
committerDavid Kalnischkies <david@kalnischkies.de>2016-05-20 09:37:24 +0200
commitfdf9eef4d96a18d0167708499c993e1174251e88 (patch)
tree049dd9a8405ac4a3a489a02475ad57235e1538f5 /apt-private/private-cacheset.cc
parent91be4122fb4dba065c19ea3f292b1945a94b5d99 (diff)
fail instead of segfault on unreadable config files
The report mentions "apt list --upgradable", but there are others which have inconsistent behavior ranging from segfaulting to doing something with the partial (and hence incomplete) data. We had a recent report about sources.list (#818628), this one mentions prefences, the obvious next step is conf files… so the testcase is adapted to check for all three in file and directory versions and run a bunch of commands each time which should all have more or less the same behavior in such a case (aka error out). Closes: 824503
Diffstat (limited to 'apt-private/private-cacheset.cc')
-rw-r--r--apt-private/private-cacheset.cc13
1 files changed, 9 insertions, 4 deletions
diff --git a/apt-private/private-cacheset.cc b/apt-private/private-cacheset.cc
index 981766cdf..52cd22d2a 100644
--- a/apt-private/private-cacheset.cc
+++ b/apt-private/private-cacheset.cc
@@ -30,13 +30,18 @@ bool GetLocalitySortedVersionSet(pkgCacheFile &CacheFile,
Matcher &matcher,
OpProgress * const progress)
{
- pkgCache *Cache = CacheFile.GetPkgCache();
- pkgDepCache *DepCache = CacheFile.GetDepCache();
+ pkgCache * const Cache = CacheFile.GetPkgCache();
+ if (unlikely(Cache == nullptr))
+ return false;
+ if (progress != nullptr)
+ progress->SubProgress(Cache->Head().PackageCount, _("Sorting"));
+
+ pkgDepCache * const DepCache = CacheFile.GetDepCache();
+ if (unlikely(DepCache == nullptr))
+ return false;
APT::CacheSetHelper helper(false);
int Done=0;
- if (progress != NULL)
- progress->SubProgress(Cache->Head().PackageCount, _("Sorting"));
bool const insertCurrentVer = _config->FindB("APT::Cmd::Installed", false);
bool const insertUpgradable = _config->FindB("APT::Cmd::Upgradable", false);