LibDriver: Reject inputs that are not COFF objects or bitcode files.
authorPeter Collingbourne <peter@pcc.me.uk>
Wed, 14 Dec 2016 22:19:22 +0000 (22:19 +0000)
committerPeter Collingbourne <peter@pcc.me.uk>
Wed, 14 Dec 2016 22:19:22 +0000 (22:19 +0000)
Fixes PR31372.

Differential Revision: https://reviews.llvm.org/D27776

llvm-svn: 289726

llvm/lib/LibDriver/LibDriver.cpp
llvm/test/LibDriver/Inputs/cl-gl.obj [new file with mode: 0755]
llvm/test/LibDriver/invalid.test [new file with mode: 0644]
llvm/test/LibDriver/thin.test

index ea6d921..fa9f02c 100644 (file)
@@ -143,6 +143,13 @@ int llvm::libDriverMain(llvm::ArrayRef<const char*> ArgsArr) {
       });
       return 1;
     }
+    sys::fs::file_magic Magic =
+        sys::fs::identify_magic(MOrErr->Buf->getBuffer());
+    if (Magic != sys::fs::file_magic::coff_object &&
+        Magic != sys::fs::file_magic::bitcode) {
+      llvm::errs() << Arg->getValue() << ": not a COFF object or bitcode file\n";
+      return 1;
+    }
     Members.emplace_back(std::move(*MOrErr));
   }
 
diff --git a/llvm/test/LibDriver/Inputs/cl-gl.obj b/llvm/test/LibDriver/Inputs/cl-gl.obj
new file mode 100755 (executable)
index 0000000..ff74655
Binary files /dev/null and b/llvm/test/LibDriver/Inputs/cl-gl.obj differ
diff --git a/llvm/test/LibDriver/invalid.test b/llvm/test/LibDriver/invalid.test
new file mode 100644 (file)
index 0000000..2a8b68c
--- /dev/null
@@ -0,0 +1,2 @@
+RUN: not llvm-lib %S/Inputs/cl-gl.obj 2>&1 | FileCheck %s
+CHECK: not a COFF object or bitcode file
index 4ab9d61..c401de4 100644 (file)
@@ -1,4 +1,4 @@
-RUN: echo foo > %t
+RUN: llvm-mc -triple=x86_64-pc-windows-msvc -filetype=obj -o %t %S/Inputs/a.s
 
 RUN: llvm-lib  -out:%t.a %t
 RUN: FileCheck --check-prefix=FAT %s < %t.a