summaryrefslogtreecommitdiffstats
path: root/clang/lib/Lex
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2012-11-08 19:22:31 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2012-11-08 19:22:31 +0000
commit7d574e269dbbebc7a7ab95de77c86475010c164a (patch)
tree2264420721b898760f5e2f9753ba801290ad8763 /clang/lib/Lex
parentf23a6e6f80e40af60a23105565704dac90b1ccf2 (diff)
downloadbcm5719-llvm-7d574e269dbbebc7a7ab95de77c86475010c164a.tar.gz
bcm5719-llvm-7d574e269dbbebc7a7ab95de77c86475010c164a.zip
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. llvm-svn: 167594
Diffstat (limited to 'clang/lib/Lex')
-rw-r--r--clang/lib/Lex/LiteralSupport.cpp11
1 files changed, 6 insertions, 5 deletions
diff --git a/clang/lib/Lex/LiteralSupport.cpp b/clang/lib/Lex/LiteralSupport.cpp
index cd32964367b..e30612e57c5 100644
--- a/clang/lib/Lex/LiteralSupport.cpp
+++ b/clang/lib/Lex/LiteralSupport.cpp
@@ -1421,21 +1421,22 @@ bool StringLiteralParser::CopyStringFragment(const Token &Tok,
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;
}
OpenPOWER on IntegriCloud