From f5394db6b1855215f2f5b7ca00246ff611ca9bab Mon Sep 17 00:00:00 2001 From: Martchus Date: Sun, 20 Mar 2022 17:21:41 +0100 Subject: [PATCH] Avoid crash when searching for empty dependency/library --- libpkg/data/database.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/libpkg/data/database.cpp b/libpkg/data/database.cpp index 9d6d16c..6db090f 100644 --- a/libpkg/data/database.cpp +++ b/libpkg/data/database.cpp @@ -286,6 +286,9 @@ std::size_t Database::packageCount() const void Database::providingPackages(const Dependency &dependency, bool reverse, const PackageVisitorConst &visitor) { + if (dependency.name.empty()) { + return; + } auto providesTxn = (reverse ? m_storage->requiredDeps : m_storage->providedDeps).getROTransaction(); auto packagesTxn = m_storage->packages.getROTransaction(); for (auto [i, end] = providesTxn.equal_range<0>(dependency.name); i != end; ++i) { @@ -305,6 +308,9 @@ void Database::providingPackages(const Dependency &dependency, bool reverse, con void Database::providingPackages(const std::string &libraryName, bool reverse, const PackageVisitorConst &visitor) { + if (libraryName.empty()) { + return; + } auto providesTxn = (reverse ? m_storage->requiredLibs : m_storage->providedLibs).getROTransaction(); auto packagesTxn = m_storage->packages.getROTransaction(); for (auto [i, end] = providesTxn.equal_range<0>(libraryName); i != end; ++i) { @@ -319,6 +325,9 @@ void Database::providingPackages(const std::string &libraryName, bool reverse, c bool Database::provides(const Dependency &dependency, bool reverse) const { + if (dependency.name.empty()) { + return false; + } auto providesTxn = (reverse ? m_storage->requiredDeps : m_storage->providedDeps).getROTransaction(); for (auto [i, end] = providesTxn.equal_range<0>(dependency.name); i != end; ++i) { const Dependency &providedDependency = i.value(); @@ -331,6 +340,9 @@ bool Database::provides(const Dependency &dependency, bool reverse) const bool Database::provides(const std::string &libraryName, bool reverse) const { + if (libraryName.empty()) { + return false; + } auto providesTxn = (reverse ? m_storage->requiredLibs : m_storage->providedLibs).getROTransaction(); return providesTxn.find<0>(libraryName) != providesTxn.end(); }