catch the case where there is no symCmd
authorMoritz Angermann <moritz.angermann@gmail.com>
Fri, 21 Apr 2017 16:12:01 +0000 (12:12 -0400)
committerBen Gamari <ben@smart-cactus.org>
Fri, 21 Apr 2017 16:12:22 +0000 (12:12 -0400)
We do check for symCmd, to set the info->nlist value, but forgot to do
the same check for info->names.  Thus when trying to extract stroff from
symCmd, we hit a segfault.

Test Plan: The validation failure on windows is rather suspicious...
let's try this one

Reviewers: bgamari, adinapoli, austin, erikd, simonmar

Reviewed By: adinapoli

Subscribers: thomie, rwbarton

Differential Revision: https://phabricator.haskell.org/D3468

rts/Linker.c
rts/linker/MachO.c

index 7366904..b214e9c 100644 (file)
@@ -1215,6 +1215,8 @@ mkOc( pathchar *path, char *image, int imageSize,
    IF_DEBUG(linker, debugBelch("mkOc: start\n"));
    oc = stgMallocBytes(sizeof(ObjectCode), "mkOc(oc)");
 
+   oc->info = NULL;
+
 #  if defined(OBJFORMAT_ELF)
    oc->formatName = "ELF";
 #  elif defined(OBJFORMAT_PEi386)
index 16b712a..e09d151 100644 (file)
@@ -130,7 +130,9 @@ ocInit_MachO(ObjectCode * oc)
     oc->info->nlist = oc->info->symCmd == NULL
               ? NULL
               : (MachONList *)(oc->image + oc->info->symCmd->symoff);
-    oc->info->names = oc->image + oc->info->symCmd->stroff;
+    oc->info->names = oc->info->symCmd == NULL
+              ? NULL
+              : (oc->image + oc->info->symCmd->stroff);
 
     /* If we have symbols, allocate and fill the macho_symbols
      * This will make relocation easier.