]> granicus.if.org Git - llvm/commitdiff
Fix a use after free on invalid input.
authorRafael Espindola <rafael.espindola@gmail.com>
Thu, 31 Oct 2013 04:20:23 +0000 (04:20 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Thu, 31 Oct 2013 04:20:23 +0000 (04:20 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@193737 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Bitcode/Reader/BitcodeReader.cpp
test/Bitcode/invalid.ll [new file with mode: 0644]
test/Bitcode/invalid.ll.bc [new file with mode: 0644]

index e408cd1f981ef1e9605751ddcbb18fe8334df3b3..1661990f065d918c70e13b7ba314eb4e7afe401d 100644 (file)
@@ -623,11 +623,7 @@ bool BitcodeReader::ParseAttrKind(uint64_t Code, Attribute::AttrKind *Kind) {
     *Kind = Attribute::ZExt;
     return false;
   default:
-    std::string Buf;
-    raw_string_ostream fmt(Buf);
-    fmt << "Unknown attribute kind (" << Code << ")";
-    fmt.flush();
-    return Error(Buf.c_str());
+    return Error("Unknown attribute kind");
   }
 }
 
diff --git a/test/Bitcode/invalid.ll b/test/Bitcode/invalid.ll
new file mode 100644 (file)
index 0000000..49189bf
--- /dev/null
@@ -0,0 +1,7 @@
+; RUN:  not llvm-dis < %s.bc 2>&1 | FileCheck %s
+
+; CHECK: llvm-dis: Unknown attribute kind
+
+; invalid.ll.bc has an invalid attribute number.
+; The test checks that LLVM reports the error and doesn't access freed memory
+; in doing so.
diff --git a/test/Bitcode/invalid.ll.bc b/test/Bitcode/invalid.ll.bc
new file mode 100644 (file)
index 0000000..b8b1c47
Binary files /dev/null and b/test/Bitcode/invalid.ll.bc differ