]> granicus.if.org Git - clang/commitdiff
don't use strtoul on a non-null-terminated string.
authorChris Lattner <sabre@nondot.org>
Wed, 11 Mar 2009 22:52:17 +0000 (22:52 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 11 Mar 2009 22:52:17 +0000 (22:52 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66732 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/Stmt.cpp

index cc120a684c5fda27e50ffd2a559430117b97df91..f68ed0ac899943bee68a74bbbb107bc6fbf1ed7c 100644 (file)
@@ -274,9 +274,11 @@ unsigned AsmStmt::AnalyzeAsmString(llvm::SmallVectorImpl<AsmStringPiece>&Pieces,
     
     if (isdigit(EscapedChar)) {
       // %n - Assembler operand n
-      char *End;
-      unsigned long N = strtoul(CurPtr-1, &End, 10);
-      assert(End != CurPtr-1 && "We know that EscapedChar is a digit!");
+      unsigned N = 0;
+      
+      --CurPtr;
+      while (CurPtr != StrEnd && isdigit(*CurPtr))
+        N = N*10+((*CurPtr++)-'0');
       
       unsigned NumOperands =
         getNumOutputs() + getNumPlusOperands() + getNumInputs();
@@ -285,7 +287,6 @@ unsigned AsmStmt::AnalyzeAsmString(llvm::SmallVectorImpl<AsmStringPiece>&Pieces,
         return diag::err_asm_invalid_operand_number;
       }
 
-      CurPtr = End;
       Pieces.push_back(AsmStringPiece(N, Modifier));
       continue;
     }