diff options
author | Moritz Angermann <moritz.angermann@gmail.com> | 2017-04-15 21:30:10 -0400 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2017-04-15 21:30:11 -0400 |
commit | 6c05b27e5bafe9f232e7014f4760335f5e3ba591 (patch) | |
tree | 816cd6036cb58b46348dfca6ade3b83f79f8d48c /rts | |
parent | 8a54a4ff5565a2130f5c122ce5368446bfb2f22e (diff) | |
download | haskell-6c05b27e5bafe9f232e7014f4760335f5e3ba591.tar.gz |
linker/mach-o: Catch the case where there is no symCmd
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.
Reviewers: bgamari, adinapoli, austin, erikd, simonmar
Reviewed By: bgamari, adinapoli
Subscribers: rwbarton, thomie
Differential Revision: https://phabricator.haskell.org/D3459
Diffstat (limited to 'rts')
-rw-r--r-- | rts/Linker.c | 2 | ||||
-rw-r--r-- | rts/linker/MachO.c | 4 |
2 files changed, 5 insertions, 1 deletions
diff --git a/rts/Linker.c b/rts/Linker.c index 7366904831..b214e9c01f 100644 --- a/rts/Linker.c +++ b/rts/Linker.c @@ -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) diff --git a/rts/linker/MachO.c b/rts/linker/MachO.c index 16b712a804..e09d151c14 100644 --- a/rts/linker/MachO.c +++ b/rts/linker/MachO.c @@ -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. |