Core: Truncate preloading ROMs that slightly exceed max size (fixes #2093)

This commit is contained in:
Vicki Pfau 2021-03-31 00:00:13 -07:00
parent 39751aac97
commit e587a12ddf
2 changed files with 8 additions and 1 deletions

View File

@ -9,6 +9,7 @@ Other fixes:
- GBA e-Reader: Fix bitmap short strip scanning - GBA e-Reader: Fix bitmap short strip scanning
- GBA Video: Fix mode 5 frame 1 caching (fixes mgba.io/i/2075) - GBA Video: Fix mode 5 frame 1 caching (fixes mgba.io/i/2075)
Misc: Misc:
- Core: Truncate preloading ROMs that slightly exceed max size (fixes mgba.io/i/2093)
- GBA: Default-enable VBA bug compat for Ruby and Emerald ROM hacks - GBA: Default-enable VBA bug compat for Ruby and Emerald ROM hacks
- Qt: Add ROM filename and size to bug reporter - Qt: Add ROM filename and size to bug reporter

View File

@ -159,8 +159,14 @@ bool mCorePreloadVFCB(struct mCore* core, struct VFile* vf, void (cb)(size_t, si
extern uint32_t* romBuffer; extern uint32_t* romBuffer;
extern size_t romBufferSize; extern size_t romBufferSize;
if (size > romBufferSize) { if (size > romBufferSize) {
if (size - romBufferSize < romBufferSize / 2) {
// Some ROM hacks accidentally overflow the size a bit, but since those are broken
// on hardware anyway we can just silently truncate them without issue.
size = romBufferSize;
} else {
return false; return false;
} }
}
vfm = VFileFromMemory(romBuffer, size); vfm = VFileFromMemory(romBuffer, size);
#else #else
vfm = VFileMemChunk(NULL, size); vfm = VFileMemChunk(NULL, size);