[PATCH] D78924: [DebugInfo] Fix crash caused by unhandled error.
Xing GUO via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Apr 27 06:25:56 PDT 2020
Higuoxing created this revision.
Higuoxing added reviewers: clayborg, aprantl.
Herald added subscribers: llvm-commits, hiraditya.
Herald added a project: LLVM.
This patch helps fix LLVM crash caused by unhandled error.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D78924
Files:
llvm/lib/DebugInfo/GSYM/ObjectFileTransformer.cpp
llvm/test/DebugInfo/gsym-invalid-section-offset.yaml
Index: llvm/test/DebugInfo/gsym-invalid-section-offset.yaml
===================================================================
--- /dev/null
+++ llvm/test/DebugInfo/gsym-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: llvm-gsymutil --convert %s -o %t.macho 2>&1 |
+# RUN: FileCheck %s
+
+# CHECK: ObjectFileTransformer: truncated or malformed object (bad section index: 3 for symbol at index 0)
+
+--- !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
Index: llvm/lib/DebugInfo/GSYM/ObjectFileTransformer.cpp
===================================================================
--- llvm/lib/DebugInfo/GSYM/ObjectFileTransformer.cpp
+++ llvm/lib/DebugInfo/GSYM/ObjectFileTransformer.cpp
@@ -82,8 +82,13 @@
size_t NumBefore = Gsym.getNumFunctionInfos();
for (const object::SymbolRef &Sym : Obj.symbols()) {
Expected<SymbolRef::Type> SymType = Sym.getType();
+ if (!SymType) {
+ logAllUnhandledErrors(SymType.takeError(), Log,
+ "ObjectFileTransformer: ");
+ 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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D78924.260304.patch
Type: text/x-patch
Size: 2029 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200427/58842b52/attachment.bin>
More information about the llvm-commits
mailing list