Skip to content

Commit 49bafa9

Browse files
0cynbdash
authored andcommitted
[SharedCache] Avoid crashing the product whenever bugs occur in ser/deser, fix compilation issue on linux
1 parent aa408cf commit 49bafa9

File tree

1 file changed

+32
-22
lines changed

1 file changed

+32
-22
lines changed

view/sharedcache/core/SharedCache.cpp

Lines changed: 32 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,9 @@ void SharedCache::PerformInitialLoad()
314314
}
315315

316316
if (primaryCacheHeader.objcOptsOffset && primaryCacheHeader.objcOptsSize) {
317-
MutableState().objcOptimizationDataRange = {primaryCacheHeader.objcOptsOffset, primaryCacheHeader.objcOptsSize};
317+
uint64_t objcOptsOffset = primaryCacheHeader.objcOptsOffset;
318+
uint64_t objcOptsSize = primaryCacheHeader.objcOptsSize;
319+
MutableState().objcOptimizationDataRange = {objcOptsOffset, objcOptsSize};
318320
}
319321

320322
switch (State().cacheFormat)
@@ -3309,30 +3311,38 @@ extern "C"
33093311
{
33103312
if (cache->object)
33113313
{
3312-
auto vm = cache->object->GetVMMap(true);
3313-
auto viewImageHeaders = cache->object->AllImageHeaders();
3314-
*count = viewImageHeaders.size();
3315-
BNDSCImage* images = (BNDSCImage*)malloc(sizeof(BNDSCImage) * viewImageHeaders.size());
3316-
size_t i = 0;
3317-
for (const auto& [baseAddress, header] : viewImageHeaders)
3318-
{
3319-
images[i].name = BNAllocString(header.installName.c_str());
3320-
images[i].headerAddress = baseAddress;
3321-
images[i].mappingCount = header.sections.size();
3322-
images[i].mappings = (BNDSCImageMemoryMapping*)malloc(sizeof(BNDSCImageMemoryMapping) * header.sections.size());
3323-
for (size_t j = 0; j < header.sections.size(); j++)
3314+
try {
3315+
auto vm = cache->object->GetVMMap(true);
3316+
auto viewImageHeaders = cache->object->AllImageHeaders();
3317+
*count = viewImageHeaders.size();
3318+
BNDSCImage* images = (BNDSCImage*)malloc(sizeof(BNDSCImage) * viewImageHeaders.size());
3319+
size_t i = 0;
3320+
for (const auto& [baseAddress, header] : viewImageHeaders)
33243321
{
3325-
const auto sectionStart = header.sections[j].addr;
3326-
images[i].mappings[j].rawViewOffset = header.sections[j].offset;
3327-
images[i].mappings[j].vmAddress = sectionStart;
3328-
images[i].mappings[j].size = header.sections[j].size;
3329-
images[i].mappings[j].name = BNAllocString(header.sectionNames[j].c_str());
3330-
images[i].mappings[j].filePath = BNAllocString(vm->MappingAtAddress(sectionStart).first.filePath.c_str());
3331-
images[i].mappings[j].loaded = cache->object->IsMemoryMapped(sectionStart);
3322+
images[i].name = BNAllocString(header.installName.c_str());
3323+
images[i].headerAddress = baseAddress;
3324+
images[i].mappingCount = header.sections.size();
3325+
images[i].mappings = (BNDSCImageMemoryMapping*)malloc(sizeof(BNDSCImageMemoryMapping) * header.sections.size());
3326+
for (size_t j = 0; j < header.sections.size(); j++)
3327+
{
3328+
const auto sectionStart = header.sections[j].addr;
3329+
images[i].mappings[j].rawViewOffset = header.sections[j].offset;
3330+
images[i].mappings[j].vmAddress = sectionStart;
3331+
images[i].mappings[j].size = header.sections[j].size;
3332+
images[i].mappings[j].name = BNAllocString(header.sectionNames[j].c_str());
3333+
images[i].mappings[j].filePath = BNAllocString(vm->MappingAtAddress(sectionStart).first.filePath.c_str());
3334+
images[i].mappings[j].loaded = cache->object->IsMemoryMapped(sectionStart);
3335+
}
3336+
i++;
33323337
}
3333-
i++;
3338+
return images;
3339+
}
3340+
catch (...)
3341+
{
3342+
LogError("SharedCache: Failed to load image listing. Likely caused by a ser/deserialization error or load failure");
3343+
*count = 0;
3344+
return nullptr;
33343345
}
3335-
return images;
33363346
}
33373347
*count = 0;
33383348
return nullptr;

0 commit comments

Comments
 (0)