[llvm] 8994b14 - [DebugInfo] Fix crash caused by unhandled error.

Xing GUO via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 28 06:36:55 PDT 2020


Author: Xing GUO
Date: 2020-04-28T21:39:25+08:00
New Revision: 8994b14e8b1eb326571411f12dab21909918abe8

URL: https://github.com/llvm/llvm-project/commit/8994b14e8b1eb326571411f12dab21909918abe8
DIFF: https://github.com/llvm/llvm-project/commit/8994b14e8b1eb326571411f12dab21909918abe8.diff

LOG: [DebugInfo] Fix crash caused by unhandled error.

Summary: This patch helps fix LLVM crash caused by unhandled error.

Reviewers: clayborg, aprantl

Reviewed By: clayborg

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

Added: 
    llvm/test/tools/llvm-gsymutil/X86/macho-invalid-section-offset.yaml

Modified: 
    llvm/lib/DebugInfo/GSYM/ObjectFileTransformer.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/DebugInfo/GSYM/ObjectFileTransformer.cpp b/llvm/lib/DebugInfo/GSYM/ObjectFileTransformer.cpp
index eb392dd83d6a..c21083dde48e 100644
--- a/llvm/lib/DebugInfo/GSYM/ObjectFileTransformer.cpp
+++ b/llvm/lib/DebugInfo/GSYM/ObjectFileTransformer.cpp
@@ -82,8 +82,12 @@ llvm::Error ObjectFileTransformer::convert(const object::ObjectFile &Obj,
   size_t NumBefore = Gsym.getNumFunctionInfos();
   for (const object::SymbolRef &Sym : Obj.symbols()) {
     Expected<SymbolRef::Type> SymType = Sym.getType();
+    if (!SymType) {
+      consumeError(SymType.takeError());
+      continue;
+    }
     const uint64_t Addr = Sym.getValue();
-    if (!SymType || SymType.get() != SymbolRef::Type::ST_Function ||
+    if (SymType.get() != SymbolRef::Type::ST_Function ||
         !Gsym.IsValidTextAddress(Addr) || Gsym.hasFunctionInfoForAddress(Addr))
       continue;
     // Function size for MachO files will be 0

diff  --git a/llvm/test/tools/llvm-gsymutil/X86/macho-invalid-section-offset.yaml b/llvm/test/tools/llvm-gsymutil/X86/macho-invalid-section-offset.yaml
new file mode 100644
index 000000000000..e9afbb673fde
--- /dev/null
+++ b/llvm/test/tools/llvm-gsymutil/X86/macho-invalid-section-offset.yaml
@@ -0,0 +1,36 @@
+## This test ensures that LLVM will not crash when converting a Mach-O object
+## file with a malformed symbol whose n_sect points to an invalid offset.
+
+# RUN: yaml2obj %s -o %t
+# RUN: not llvm-gsymutil --convert %t -o %t.o 2>&1 | FileCheck %s
+
+# CHECK: Loaded 0 functions from symbol table.
+
+--- !mach-o
+FileHeader:
+  magic:       0xFEEDFACF
+  cputype:     0x01000007
+  cpusubtype:  0x00000003
+  filetype:    0x0000000A
+  ncmds:       1
+  sizeofcmds:  100
+  flags:       0x00000000
+  reserved:    0x00000000
+LoadCommands:
+  - cmd:       LC_SYMTAB
+    cmdsize:   24
+    symoff:    4096
+    nsyms:     1
+    stroff:    4144
+    strsize:   6
+LinkEditData:
+  NameList:
+    - n_strx:  2    # _foo
+      n_type:  0x0e
+      n_sect:  3    # Points to an invalid offset.
+      n_desc:  0
+      n_value: 1234
+  StringTable:
+    - ''
+    - ''
+    - _foo


        


More information about the llvm-commits mailing list