Author: hokein Date: Mon Oct 1 07:38:43 2018 New Revision: 343481 URL: http://llvm.org/viewvc/llvm-project?rev=343481&view=rev Log: [Preprocessor] Fix a crash when handling non-alpha include header.
Summary: the crash is casued by an assertion in StringRef. (llvm::StringRef::front() const: Assertion `!empty()' failed.) Reviewers: sammccall Subscribers: jsji, cfe-commits Differential Revision: https://reviews.llvm.org/D52721 Added: cfe/trunk/test/Preprocessor/include-nonalpha-no-crash.c Modified: cfe/trunk/lib/Lex/PPDirectives.cpp Modified: cfe/trunk/lib/Lex/PPDirectives.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PPDirectives.cpp?rev=343481&r1=343480&r2=343481&view=diff ============================================================================== --- cfe/trunk/lib/Lex/PPDirectives.cpp (original) +++ cfe/trunk/lib/Lex/PPDirectives.cpp Mon Oct 1 07:38:43 2018 @@ -1889,13 +1889,16 @@ void Preprocessor::HandleIncludeDirectiv // characters StringRef OriginalFilename = Filename; if (!File) { - while (!isAlphanumeric(Filename.front())) { - Filename = Filename.drop_front(); - } - while (!isAlphanumeric(Filename.back())) { - Filename = Filename.drop_back(); - } - + // A heuristic to correct a typo file name by removing leading and + // trailing non-isAlphanumeric characters. + auto CorrectTypoFilename = [](llvm::StringRef Filename) { + Filename = Filename.drop_until(isAlphanumeric); + while (!Filename.empty() && !isAlphanumeric(Filename.back())) { + Filename = Filename.drop_back(); + } + return Filename; + }; + Filename = CorrectTypoFilename(Filename); File = LookupFile( FilenameLoc, LangOpts.MSVCCompat ? NormalizedPath.c_str() : Filename, isAngled, Added: cfe/trunk/test/Preprocessor/include-nonalpha-no-crash.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/include-nonalpha-no-crash.c?rev=343481&view=auto ============================================================================== --- cfe/trunk/test/Preprocessor/include-nonalpha-no-crash.c (added) +++ cfe/trunk/test/Preprocessor/include-nonalpha-no-crash.c Mon Oct 1 07:38:43 2018 @@ -0,0 +1,3 @@ +// RUN: %clang_cc1 %s -verify + +#include "./" // expected-error {{'./' file not found}} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits