[cfe-commits] r167594 - in /cfe/trunk: lib/Lex/LiteralSupport.cpp test/Misc/unprintable.c

Benjamin Kramer benny.kra at googlemail.com
Thu Nov 8 11:22:31 PST 2012


Author: d0k
Date: Thu Nov  8 13:22:31 2012
New Revision: 167594

URL: http://llvm.org/viewvc/llvm-project?rev=167594&view=rev
Log:
LiteralSupport: Don't overflow the temporary buffer when decoding invalid string parts.

Instead just use a dummy buffer, we're not going to use the decoded string anyways.
Fixes PR14292.

Modified:
    cfe/trunk/lib/Lex/LiteralSupport.cpp
    cfe/trunk/test/Misc/unprintable.c

Modified: cfe/trunk/lib/Lex/LiteralSupport.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/LiteralSupport.cpp?rev=167594&r1=167593&r2=167594&view=diff
==============================================================================
--- cfe/trunk/lib/Lex/LiteralSupport.cpp (original)
+++ cfe/trunk/lib/Lex/LiteralSupport.cpp Thu Nov  8 13:22:31 2012
@@ -1421,21 +1421,22 @@
            NoErrorOnBadEncoding ? diag::warn_bad_string_encoding
                                 : diag::err_bad_string_encoding);
 
-    char *SavedResultPtr = ResultPtr;
     const char *NextStart = resyncUTF8(ErrorPtr, Fragment.end());
     StringRef NextFragment(NextStart, Fragment.end()-NextStart);
 
+    // Decode into a dummy buffer.
+    SmallString<512> Dummy;
+    Dummy.reserve(Fragment.size() * CharByteWidth);
+    char *Ptr = Dummy.data();
+
     while (!Builder.hasMaxRanges() &&
-           !ConvertUTF8toWide(CharByteWidth, NextFragment, ResultPtr,
-                              ErrorPtrTmp)) {
+           !ConvertUTF8toWide(CharByteWidth, NextFragment, Ptr, ErrorPtrTmp)) {
       const char *ErrorPtr = reinterpret_cast<const char *>(ErrorPtrTmp);
       NextStart = resyncUTF8(ErrorPtr, Fragment.end());
       Builder << MakeCharSourceRange(Features, SourceLoc, TokBegin,
                                      ErrorPtr, NextStart);
       NextFragment = StringRef(NextStart, Fragment.end()-NextStart);
     }
-
-    ResultPtr = SavedResultPtr;
   }
   return !NoErrorOnBadEncoding;
 }

Modified: cfe/trunk/test/Misc/unprintable.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Misc/unprintable.c?rev=167594&r1=167593&r2=167594&view=diff
==============================================================================
--- cfe/trunk/test/Misc/unprintable.c (original)
+++ cfe/trunk/test/Misc/unprintable.c Thu Nov  8 13:22:31 2012
@@ -30,4 +30,10 @@
 // CHECK: {{^    /\* <U\+FFFE> \*/ "<U\+FFFE>berhund";}}
 // CHECK: {{^                   \^~~~~~~~~~~~~~~~~}}
 
+
+// PR14292
+    "xĀ°xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+// CHECK: {{^    "x<B0>}}
+// CHECK: {{^    \^}}
+
 }





More information about the cfe-commits mailing list