]> granicus.if.org Git - llvm/commitdiff
AsmParser: Verifier that the contents of a hex integer are hex
authorDavid Majnemer <david.majnemer@gmail.com>
Tue, 9 Dec 2014 23:50:38 +0000 (23:50 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Tue, 9 Dec 2014 23:50:38 +0000 (23:50 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@223856 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AsmParser/LLLexer.cpp

index d2ed616e782159aa018aaa156583a8babae6d9ea..99f94bbb070872004bb5ef7bb7f351051e9644e1 100644 (file)
@@ -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);