]> granicus.if.org Git - clang/commitdiff
Don't overread the buffer when an %x escape in inline asm ends prematurely.
authorBenjamin Kramer <benny.kra@googlemail.com>
Tue, 5 Jul 2011 11:13:37 +0000 (11:13 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Tue, 5 Jul 2011 11:13:37 +0000 (11:13 +0000)
Tested by valgrind & Sema/asm.c.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@134404 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/Stmt.cpp

index 39f23fba9ed38e51febc1a4f632d90c8fcdae8b6..e293f324aba8f275dc29ff73b2d96d60cf6d3eb5 100644 (file)
@@ -366,6 +366,10 @@ unsigned AsmStmt::AnalyzeAsmString(llvm::SmallVectorImpl<AsmStringPiece>&Pieces,
     // Handle %x4 and %x[foo] by capturing x as the modifier character.
     char Modifier = '\0';
     if (isalpha(EscapedChar)) {
+      if (CurPtr == StrEnd) { // Premature end.
+        DiagOffs = CurPtr-StrStart-1;
+        return diag::err_asm_invalid_escape;
+      }
       Modifier = EscapedChar;
       EscapedChar = *CurPtr++;
     }