[clang-tools-extra] a47af1a - [clangd][Dex] Fix crashes when building trigrams for empty identifier
Kadir Cetinkaya via cfe-commits
cfe-commits at lists.llvm.org
Mon Dec 13 07:05:07 PST 2021
Author: Kadir Cetinkaya
Date: 2021-12-13T15:58:33+01:00
New Revision: a47af1ac343faba5581dfd243a8d8c56cb7f74b4
URL: https://github.com/llvm/llvm-project/commit/a47af1ac343faba5581dfd243a8d8c56cb7f74b4
DIFF: https://github.com/llvm/llvm-project/commit/a47af1ac343faba5581dfd243a8d8c56cb7f74b4.diff
LOG: [clangd][Dex] Fix crashes when building trigrams for empty identifier
Added:
Modified:
clang-tools-extra/clangd/index/dex/Trigram.cpp
clang-tools-extra/clangd/unittests/DexTests.cpp
Removed:
################################################################################
diff --git a/clang-tools-extra/clangd/index/dex/Trigram.cpp b/clang-tools-extra/clangd/index/dex/Trigram.cpp
index e6f42f67c50e7..16bb580179d0e 100644
--- a/clang-tools-extra/clangd/index/dex/Trigram.cpp
+++ b/clang-tools-extra/clangd/index/dex/Trigram.cpp
@@ -28,6 +28,7 @@ namespace dex {
// Produce trigrams (including duplicates) and pass them to Out().
template <typename Func>
static void identifierTrigrams(llvm::StringRef Identifier, Func Out) {
+ assert(!Identifier.empty());
// Apply fuzzy matching text segmentation.
llvm::SmallVector<CharRole> Roles(Identifier.size());
calculateRoles(Identifier,
@@ -104,6 +105,9 @@ void generateIdentifierTrigrams(llvm::StringRef Identifier,
// The magic number was tuned by running IndexBenchmark.DexBuild.
constexpr unsigned ManyTrigramsIdentifierThreshold = 14;
Result.clear();
+ if (Identifier.empty())
+ return;
+
if (Identifier.size() < ManyTrigramsIdentifierThreshold) {
identifierTrigrams(Identifier, [&](Trigram T) {
if (!llvm::is_contained(Result, T))
diff --git a/clang-tools-extra/clangd/unittests/DexTests.cpp b/clang-tools-extra/clangd/unittests/DexTests.cpp
index 249cc101a74cd..7e10ea53a43e2 100644
--- a/clang-tools-extra/clangd/unittests/DexTests.cpp
+++ b/clang-tools-extra/clangd/unittests/DexTests.cpp
@@ -415,6 +415,7 @@ TEST(DexTrigrams, IdentifierTrigrams) {
"cdg", "def", "deg", "dgh", "dgk", "efg", "egh",
"egk", "fgh", "fgk", "ghi", "ghk", "gkl", "hij",
"hik", "hkl", "ijk", "ikl", "jkl", "klm"}));
+ EXPECT_THAT(identifierTrigramTokens(""), IsEmpty());
}
TEST(DexTrigrams, QueryTrigrams) {
More information about the cfe-commits
mailing list