summaryrefslogtreecommitdiffstats
path: root/clang/lib/Frontend/PrintPreprocessedOutput.cpp
diff options
context:
space:
mode:
authorAlexey Bataev <a.bataev@hotmail.com>2016-02-09 11:01:58 +0000
committerAlexey Bataev <a.bataev@hotmail.com>2016-02-09 11:01:58 +0000
commit56f5ad161a577a4e7de200ebde2d61b349730e68 (patch)
tree34ac38921193961a3a50cbf848fc7553a7037252 /clang/lib/Frontend/PrintPreprocessedOutput.cpp
parentde99290e0abd30581a6375314662ce802be7a42a (diff)
downloadbcm5719-llvm-56f5ad161a577a4e7de200ebde2d61b349730e68.tar.gz
bcm5719-llvm-56f5ad161a577a4e7de200ebde2d61b349730e68.zip
Fix possible OOB access found by buildbot
llvm-svn: 260219
Diffstat (limited to 'clang/lib/Frontend/PrintPreprocessedOutput.cpp')
-rw-r--r--clang/lib/Frontend/PrintPreprocessedOutput.cpp15
1 files changed, 8 insertions, 7 deletions
diff --git a/clang/lib/Frontend/PrintPreprocessedOutput.cpp b/clang/lib/Frontend/PrintPreprocessedOutput.cpp
index c57a736d1b0..eee9da8594b 100644
--- a/clang/lib/Frontend/PrintPreprocessedOutput.cpp
+++ b/clang/lib/Frontend/PrintPreprocessedOutput.cpp
@@ -573,19 +573,20 @@ struct UnknownPragmaHandler : public PragmaHandler {
Token &PragmaTok) override {
// Figure out what line we went to and insert the appropriate number of
// newline characters.
+ Callbacks->startNewLineIfNeeded();
+ Callbacks->MoveToLine(PragmaTok.getLocation());
+ Callbacks->OS.write(Prefix, strlen(Prefix));
+
if (ShouldExpandTokens) {
// The first token does not have expanded macros. Expand them, if
// required.
- Token Toks[] = {PragmaTok};
- PP.EnterTokenStream(Toks, llvm::array_lengthof(Toks),
+ Token *Toks = new Token[1];
+ Toks[0] = PragmaTok;
+ PP.EnterTokenStream(Toks, /*NumToks=*/1,
/*DisableMacroExpansion=*/false,
- /*OwnsTokens=*/false);
+ /*OwnsTokens=*/true);
PP.Lex(PragmaTok);
}
- Callbacks->startNewLineIfNeeded();
- Callbacks->MoveToLine(PragmaTok.getLocation());
- Callbacks->OS.write(Prefix, strlen(Prefix));
-
Token PrevToken;
Token PrevPrevToken;
PrevToken.startToken();
OpenPOWER on IntegriCloud