diff options
author | David Majnemer <david.majnemer@gmail.com> | 2014-12-09 23:50:38 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2014-12-09 23:50:38 +0000 |
commit | aa5d70764f8237cf5b715d73a17f986692d13d7a (patch) | |
tree | b3bad1d0e865f87b104039cb36550fff43f197de /llvm/lib/AsmParser | |
parent | 8759649013a21b7727feba4ebaf630a774ff4241 (diff) | |
download | bcm5719-llvm-aa5d70764f8237cf5b715d73a17f986692d13d7a.tar.gz bcm5719-llvm-aa5d70764f8237cf5b715d73a17f986692d13d7a.zip |
AsmParser: Verifier that the contents of a hex integer are hex
llvm-svn: 223856
Diffstat (limited to 'llvm/lib/AsmParser')
-rw-r--r-- | llvm/lib/AsmParser/LLLexer.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/llvm/lib/AsmParser/LLLexer.cpp b/llvm/lib/AsmParser/LLLexer.cpp index d2ed616e782..99f94bbb070 100644 --- a/llvm/lib/AsmParser/LLLexer.cpp +++ b/llvm/lib/AsmParser/LLLexer.cpp @@ -757,7 +757,13 @@ lltok::Kind LLLexer::LexIdentifier() { isxdigit(static_cast<unsigned char>(TokStart[3]))) { int len = CurPtr-TokStart-3; uint32_t bits = len * 4; - APInt Tmp(bits, StringRef(TokStart+3, len), 16); + StringRef HexStr(TokStart + 3, len); + if (!std::all_of(HexStr.begin(), HexStr.end(), isxdigit)) { + // Bad token, return it as an error. + CurPtr = TokStart+3; + return lltok::Error; + } + APInt Tmp(bits, HexStr, 16); uint32_t activeBits = Tmp.getActiveBits(); if (activeBits > 0 && activeBits < bits) Tmp = Tmp.trunc(activeBits); |