summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Andres Klode <julian.klode@canonical.com>2019-02-06 15:01:22 +0100
committerJulian Andres Klode <julian.klode@canonical.com>2019-02-08 13:01:21 +0100
commit5d07bad6105eb1b7c158c502fe89803e120be064 (patch)
tree4c92a9f4ed6461ba31b4d700c6a7295ff2450009
parent7b552715c93e1b4e113d5a5e85c31ed1db1eb43b (diff)
Fix crashes in apt search, cache file
When BuildDepCaches() is called before BuildCaches() we end up with dereferencing a null pointer cache in the depcache constructor. Furthermore, in private-search, we check that Cache == NULL, but only after constructing the policy and records, which does not work reliably, because the records construction accesses the cache as well. LP: #1815187 Test-Case: ./build/bin/apt search -o RootDir=/dev/null foo
-rw-r--r--apt-pkg/cachefile.cc2
-rw-r--r--apt-private/private-search.cc6
2 files changed, 7 insertions, 1 deletions
diff --git a/apt-pkg/cachefile.cc b/apt-pkg/cachefile.cc
index 0fd40106f..96bcdc097 100644
--- a/apt-pkg/cachefile.cc
+++ b/apt-pkg/cachefile.cc
@@ -140,6 +140,8 @@ bool pkgCacheFile::BuildPolicy(OpProgress * /*Progress*/)
/* */
bool pkgCacheFile::BuildDepCache(OpProgress *Progress)
{
+ if (BuildCaches(Progress, false) == false)
+ return false;
if (DCache != NULL)
return true;
diff --git a/apt-private/private-search.cc b/apt-private/private-search.cc
index ecd5d7fad..e218bf76c 100644
--- a/apt-private/private-search.cc
+++ b/apt-private/private-search.cc
@@ -31,9 +31,13 @@ bool FullTextSearch(CommandLine &CmdL) /*{{{*/
{
pkgCacheFile CacheFile;
pkgCache *Cache = CacheFile.GetPkgCache();
+ if (unlikely(Cache == NULL))
+ return false;
+
pkgDepCache::Policy *Plcy = CacheFile.GetPolicy();
pkgRecords records(CacheFile);
- if (unlikely(Cache == NULL || Plcy == NULL))
+
+ if (unlikely(Plcy == NULL))
return false;
const char **patterns;