[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