diff --git a/CHANGES b/CHANGES index 4e5dddfbb..bec235b61 100644 --- a/CHANGES +++ b/CHANGES @@ -24,6 +24,7 @@ Bugfixes: - VFS: Fix resource leaks if some allocations fail - Video: Fix an issue with very long filenames - GBA Video: Blended sprites should never have other effects applied + - GBA: Fix crash if a 512kb flash save is loaded when a game has a 1Mb flash override Misc: - Qt: Handle saving input settings better - Debugger: Free watchpoints in addition to breakpoints diff --git a/src/gba/savedata.c b/src/gba/savedata.c index 1b8d02a2b..68cccf685 100644 --- a/src/gba/savedata.c +++ b/src/gba/savedata.c @@ -149,14 +149,17 @@ void GBASavedataInitFlash(struct GBASavedata* savedata, bool realisticTiming) { GBALog(0, GBA_LOG_WARN, "Can't re-initialize savedata"); return; } - size_t flashSize = SIZE_CART_FLASH512; + int32_t flashSize = SIZE_CART_FLASH512; + if (savedata->type == SAVEDATA_FLASH1M) { + flashSize = SIZE_CART_FLASH1M; + } off_t end; if (!savedata->vf) { end = 0; savedata->data = anonymousMemoryMap(SIZE_CART_FLASH1M); } else { end = savedata->vf->size(savedata->vf); - if (end < SIZE_CART_FLASH512) { + if (end < flashSize) { savedata->vf->truncate(savedata->vf, SIZE_CART_FLASH1M); flashSize = SIZE_CART_FLASH1M; }