From bddeba59012918da6a05b485f733cc4cb7837d05 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sun, 13 Jul 2014 23:26:47 -0700 Subject: [PATCH] Add a safety check for lots of segments. --- Core/HLE/sceKernelModule.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Core/HLE/sceKernelModule.cpp b/Core/HLE/sceKernelModule.cpp index 2ee547b68e..89785bdf2d 100644 --- a/Core/HLE/sceKernelModule.cpp +++ b/Core/HLE/sceKernelModule.cpp @@ -948,8 +948,10 @@ Module *__KernelLoadELFFromPtr(const u8 *ptr, u32 loadAddress, std::string *erro module->nm.data_size = 0; // TODO: Is summing them up correct? Must not be since the numbers aren't exactly right. for (int i = 0; i < reader.GetNumSegments(); ++i) { - module->nm.segmentaddr[i] = reader.GetSegmentVaddr(i); - module->nm.segmentsize[i] = reader.GetSegmentMemSize(i); + if (i < (int)ARRAY_SIZE(module->nm.segmentaddr)) { + module->nm.segmentaddr[i] = reader.GetSegmentVaddr(i); + module->nm.segmentsize[i] = reader.GetSegmentMemSize(i); + } module->nm.data_size += reader.GetSegmentDataSize(i); } module->nm.gp_value = modinfo->gp; @@ -968,7 +970,7 @@ Module *__KernelLoadELFFromPtr(const u8 *ptr, u32 loadAddress, std::string *erro } } - if (!module->isFake && module->memoryBlockAddr != 0) { + if (!module->isFake && module->memoryBlockAddr != 0) { symbolMap.AddModule(moduleName, module->memoryBlockAddr, module->memoryBlockSize); }