[MachO] Fix LC_DYSYMTAB validation for external symbols
authorFrancis Visoiu Mistrih <francisvm@yahoo.com>
Tue, 4 Sep 2018 16:31:48 +0000 (16:31 +0000)
committerFrancis Visoiu Mistrih <francisvm@yahoo.com>
Tue, 4 Sep 2018 16:31:48 +0000 (16:31 +0000)
We were validating the same index (ilocalsym) twice, while iextdefsym
was never validated.

llvm-svn: 341378

llvm/lib/Object/MachOObjectFile.cpp
llvm/test/tools/llvm-objdump/macho-bad-dysymtab.test [new file with mode: 0644]

index e422903..76480b4 100644 (file)
@@ -1592,7 +1592,7 @@ MachOObjectFile::MachOObjectFile(MemoryBufferRef Object, bool IsLittleEndian,
                            "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;
diff --git a/llvm/test/tools/llvm-objdump/macho-bad-dysymtab.test b/llvm/test/tools/llvm-objdump/macho-bad-dysymtab.test
new file mode 100644 (file)
index 0000000..90a5a27
--- /dev/null
@@ -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
+    - ''
+    - ''
+    - ''
+...