summaryrefslogtreecommitdiffstats
path: root/llvm/lib/AsmParser
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2014-12-09 23:50:38 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2014-12-09 23:50:38 +0000
commitaa5d70764f8237cf5b715d73a17f986692d13d7a (patch)
treeb3bad1d0e865f87b104039cb36550fff43f197de /llvm/lib/AsmParser
parent8759649013a21b7727feba4ebaf630a774ff4241 (diff)
downloadbcm5719-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.cpp8
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);
OpenPOWER on IntegriCloud