llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: dmaclach (dmaclach) <details> <summary>Changes</summary> In Clang Tooling, escape HeaderStem before constructing MainIncludeRegex to prevent special characters (such as '+') from being interpreted as regex operators. Useful for Objective-C where "Foo+Bar.h" headers are very common for categories. --- Full diff: https://github.com/llvm/llvm-project/pull/211934.diff 2 Files Affected: - (modified) clang/lib/Tooling/Inclusions/HeaderIncludes.cpp (+2-1) - (modified) clang/unittests/Tooling/HeaderIncludesTest.cpp (+14) ``````````diff diff --git a/clang/lib/Tooling/Inclusions/HeaderIncludes.cpp b/clang/lib/Tooling/Inclusions/HeaderIncludes.cpp index 1212af52e1490..34f21faa8e342 100644 --- a/clang/lib/Tooling/Inclusions/HeaderIncludes.cpp +++ b/clang/lib/Tooling/Inclusions/HeaderIncludes.cpp @@ -340,7 +340,8 @@ bool IncludeCategoryManager::isMainHeader(StringRef IncludeName) const { else if (FileStem.equals_insensitive(HeaderStem)) Matching = FileStem; // example 3) if (!Matching.empty()) { - llvm::Regex MainIncludeRegex(HeaderStem.str() + Style.IncludeIsMainRegex, + llvm::Regex MainIncludeRegex(llvm::Regex::escape(HeaderStem) + + Style.IncludeIsMainRegex, llvm::Regex::IgnoreCase); if (MainIncludeRegex.match(Matching)) return true; diff --git a/clang/unittests/Tooling/HeaderIncludesTest.cpp b/clang/unittests/Tooling/HeaderIncludesTest.cpp index 95fb05885a0b9..bc2ac3a97e97d 100644 --- a/clang/unittests/Tooling/HeaderIncludesTest.cpp +++ b/clang/unittests/Tooling/HeaderIncludesTest.cpp @@ -144,6 +144,20 @@ TEST_F(HeaderIncludesTest, InsertAfterMainHeader) { EXPECT_NE(Expected, insert(Code, "<a>")) << "Not main header"; } +TEST_F(HeaderIncludesTest, InsertAfterMainHeaderWithSpecialChars) { + std::string Code = "#include \"fix+bar.h\"\n" + "\n" + "int main() {}"; + std::string Expected = "#include \"fix+bar.h\"\n" + "#include <a>\n" + "\n" + "int main() {}"; + Style = format::getGoogleStyle(format::FormatStyle::LanguageKind::LK_Cpp) + .IncludeStyle; + FileName = "fix+bar.cpp"; + EXPECT_EQ(Expected, insert(Code, "<a>")); +} + TEST_F(HeaderIncludesTest, InsertMainHeader) { Style = format::getGoogleStyle(format::FormatStyle::LanguageKind::LK_Cpp) .IncludeStyle; `````````` </details> https://github.com/llvm/llvm-project/pull/211934 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
