From: Daniel Jasper Date: Wed, 6 May 2015 08:58:57 +0000 (+0000) Subject: clang-format: Prevent assertion discovered by fuzzer. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e1d6c146424e0ed4645d28426bbc5f4a65d6ef4f;p=clang clang-format: Prevent assertion discovered by fuzzer. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@236578 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Format/TokenAnnotator.cpp b/lib/Format/TokenAnnotator.cpp index 39ac66b27f..fa12d4dd7a 100644 --- a/lib/Format/TokenAnnotator.cpp +++ b/lib/Format/TokenAnnotator.cpp @@ -895,8 +895,16 @@ private: (!Current.Previous || Current.Previous->isNot(tok::l_square))) { Current.Type = TT_BinaryOperator; } else if (Current.is(tok::comment)) { - Current.Type = - Current.TokenText.startswith("/*") ? TT_BlockComment : TT_LineComment; + if (Current.TokenText.startswith("/*")) { + if (Current.TokenText.endswith("*/")) + Current.Type = TT_BlockComment; + else + // The lexer has for some reason determined a comment here. But we + // cannot really handle it, if it isn't properly terminated. + Current.Tok.setKind(tok::unknown); + } else { + Current.Type = TT_LineComment; + } } else if (Current.is(tok::r_paren)) { if (rParenEndsCast(Current)) Current.Type = TT_CastRParen; diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index 762f92c042..31befad678 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -1056,6 +1056,8 @@ TEST_F(FormatTest, UnderstandsSingleLineComments) { verifyNoCrash("/\\\n/"); verifyNoCrash("/\\\n* */"); + // The 0-character somehow makes the lexer return a proper comment. + verifyNoCrash(StringRef("/*\\\0\n/", 6)); } TEST_F(FormatTest, KeepsParameterWithTrailingCommentsOnTheirOwnLine) {