]> granicus.if.org Git - clang/commitdiff
clang-format: Fix crasher when splitting incomplete escape sequences.
authorDaniel Jasper <djasper@google.com>
Wed, 21 Jan 2015 19:50:35 +0000 (19:50 +0000)
committerDaniel Jasper <djasper@google.com>
Wed, 21 Jan 2015 19:50:35 +0000 (19:50 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@226698 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Format/BreakableToken.cpp
unittests/Format/FormatTest.cpp

index 26f1371b4092e0970bbf4c126d4abb92c7cc3de1..c84d9afdd4e8ee5d1736163d89009b7ee9fc9318 100644 (file)
@@ -106,7 +106,7 @@ getStringSplit(StringRef Text, unsigned UsedColumns, unsigned ColumnLimit,
           Text.substr(0, Advance), UsedColumns + Chars, TabWidth, Encoding);
     }
 
-    if (Chars > MaxSplit || Text.size() == Advance)
+    if (Chars > MaxSplit || Text.size() <= Advance)
       break;
 
     if (IsBlank(Text[0]))
index 553368d563302db66f76d27abe070b09cea9bd14..7c86d14a528bf4024a558c692b4961925852ef88 100644 (file)
@@ -7444,6 +7444,12 @@ TEST_F(FormatTest, BreaksWideAndNSStringLiterals) {
   EXPECT_EQ("@\"NSString \"\n"
             "@\"literal\";",
             format("@\"NSString literal\";", getGoogleStyleWithColumns(19)));
+
+  // This input makes clang-format try to split the incomplete unicode escape
+  // sequence, which used to lead to a crasher.
+  verifyNoCrash(
+      "aaaaaaaaaaaaaaaaaaaa = L\"\\udff\"'; // aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+      getLLVMStyleWithColumns(60));
 }
 
 TEST_F(FormatTest, DoesNotBreakRawStringLiterals) {