[Object, ELF] Don't assert on invalid magic in createELFObjectFile.
authorAlexey Samsonov <vonosmas@gmail.com>
Thu, 4 Jun 2015 23:14:43 +0000 (23:14 +0000)
committerAlexey Samsonov <vonosmas@gmail.com>
Thu, 4 Jun 2015 23:14:43 +0000 (23:14 +0000)
Instead, return a proper error code from factory.

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

lib/Object/ELFObjectFile.cpp
test/DebugInfo/Inputs/invalid.elf.3 [new file with mode: 0644]
test/DebugInfo/dwarfdump-invalid.test

index 1ffdc01bcd34fe4d8444a0b5935104f815d7d188..c7df30a590351683055c28959b89ea32942f66ae 100644 (file)
@@ -39,14 +39,15 @@ ObjectFile::createELFObjectFile(MemoryBufferRef Obj) {
       R.reset(new ELFObjectFile<ELFType<support::big, false>>(Obj, EC));
     else
       return object_error::parse_failed;
-  } else {
-    assert(Ident.first == ELF::ELFCLASS64);
+  } else if (Ident.first == ELF::ELFCLASS64) {
     if (Ident.second == ELF::ELFDATA2LSB)
       R.reset(new ELFObjectFile<ELFType<support::little, true>>(Obj, EC));
     else if (Ident.second == ELF::ELFDATA2MSB)
       R.reset(new ELFObjectFile<ELFType<support::big, true>>(Obj, EC));
     else
       return object_error::parse_failed;
+  } else {
+    return object_error::parse_failed;
   }
 
   if (EC)
diff --git a/test/DebugInfo/Inputs/invalid.elf.3 b/test/DebugInfo/Inputs/invalid.elf.3
new file mode 100644 (file)
index 0000000..f494460
--- /dev/null
@@ -0,0 +1 @@
+\7fELF\82Lþ'\7fELF\ 2\ 1\ 1\ 1\ 1B
\ No newline at end of file
index 5b616bd5581dec43aa3f8a6a5a67a8cb3e33f4c3..da5b23e30ceb9fe9280d1bf5f4bdc541e689886e 100644 (file)
@@ -2,4 +2,5 @@
 
 RUN: llvm-dwarfdump %p/Inputs/invalid.elf 2>&1 | FileCheck %s --check-prefix=INVALID-ELF
 RUN: llvm-dwarfdump %p/Inputs/invalid.elf.2 2>&1 | FileCheck %s --check-prefix=INVALID-ELF
+RUN: llvm-dwarfdump %p/Inputs/invalid.elf.3 2>&1 | FileCheck %s --check-prefix=INVALID-ELF
 INVALID-ELF: Invalid data was encountered while parsing the file