[llvm] r341378 - [MachO] Fix LC_DYSYMTAB validation for external symbols

Francis Visoiu Mistrih via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 4 09:31:48 PDT 2018


Author: thegameg
Date: Tue Sep  4 09:31:48 2018
New Revision: 341378

URL: http://llvm.org/viewvc/llvm-project?rev=341378&view=rev
Log:
[MachO] Fix LC_DYSYMTAB validation for external symbols

We were validating the same index (ilocalsym) twice, while iextdefsym
was never validated.

Added:
    llvm/trunk/test/tools/llvm-objdump/macho-bad-dysymtab.test
Modified:
    llvm/trunk/lib/Object/MachOObjectFile.cpp

Modified: llvm/trunk/lib/Object/MachOObjectFile.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/MachOObjectFile.cpp?rev=341378&r1=341377&r2=341378&view=diff
==============================================================================
--- llvm/trunk/lib/Object/MachOObjectFile.cpp (original)
+++ llvm/trunk/lib/Object/MachOObjectFile.cpp Tue Sep  4 09:31:48 2018
@@ -1592,7 +1592,7 @@ MachOObjectFile::MachOObjectFile(MemoryB
                            "command extends past the end of the symbol table");
       return;
     }
-    if (Dysymtab.nextdefsym != 0 && Dysymtab.ilocalsym > Symtab.nsyms) {
+    if (Dysymtab.nextdefsym != 0 && Dysymtab.iextdefsym > Symtab.nsyms) {
       Err = malformedError("nextdefsym in LC_DYSYMTAB load command "
                            "extends past the end of the symbol table");
       return;

Added: llvm/trunk/test/tools/llvm-objdump/macho-bad-dysymtab.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/macho-bad-dysymtab.test?rev=341378&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-objdump/macho-bad-dysymtab.test (added)
+++ llvm/trunk/test/tools/llvm-objdump/macho-bad-dysymtab.test Tue Sep  4 09:31:48 2018
@@ -0,0 +1,51 @@
+#RUN: yaml2obj %s > %t1.dylib
+#RUN: not llvm-objdump -d %t1.dylib 2>&1 | FileCheck %s
+
+--- !mach-o
+FileHeader:
+  magic:           0xFEEDFACF
+  cputype:         0x01000007
+  cpusubtype:      0x80000003
+  filetype:        0x00000002
+  ncmds:           2
+  sizeofcmds:      104
+  flags:           0x00200085
+  reserved:        0x00000000
+LoadCommands:
+  - cmd:             LC_SYMTAB
+    cmdsize:         24
+    symoff:          136
+    nsyms:           3
+    stroff:          0
+    strsize:         0
+  - cmd:             LC_DYSYMTAB
+    cmdsize:         80
+    ilocalsym:       0
+    nlocalsym:       0
+    iextdefsym:      4
+#CHECK: truncated or malformed object (nextdefsym in LC_DYSYMTAB load command extends past the end of the symbol table)
+    nextdefsym:      2
+    iundefsym:       2
+    nundefsym:       1
+    tocoff:          0
+    ntoc:            0
+    modtaboff:       0
+    nmodtab:         0
+    extrefsymoff:    0
+    nextrefsyms:     0
+    indirectsymoff:  0
+    nindirectsyms:   0
+    extreloff:       0
+    nextrel:         0
+    locreloff:       0
+    nlocrel:         0
+LinkEditData:
+  StringTable:
+    - ' '
+    - __mh_execute_header
+    - _main
+    - dyld_stub_binder
+    - ''
+    - ''
+    - ''
+...




More information about the llvm-commits mailing list