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) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits