From 6ad402170c148bf6668e49767eceee040342a540 Mon Sep 17 00:00:00 2001 From: Jeffrey Pfau Date: Tue, 2 Jun 2015 22:20:19 -0700 Subject: [PATCH] GBA: Fix ROM size check --- src/gba/serialize.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gba/serialize.c b/src/gba/serialize.c index 447d47aa6..049acd2e5 100644 --- a/src/gba/serialize.c +++ b/src/gba/serialize.c @@ -106,7 +106,8 @@ void GBADeserialize(struct GBA* gba, const struct GBASerializedState* state) { GBALog(gba, GBA_LOG_WARN, "Savestate is corrupted: audio channel 4 register is negative"); return; } - if (state->cpu.gprs[ARM_PC] == BASE_CART0 || (state->cpu.gprs[ARM_PC] & SIZE_CART0) >= gba->memory.romSize) { + int region = (state->cpu.gprs[ARM_PC] >> BASE_OFFSET); + if ((region == REGION_CART0 || region == REGION_CART1 || region == REGION_CART2) && ((state->cpu.gprs[ARM_PC] - WORD_SIZE_ARM) & SIZE_CART0) >= gba->memory.romSize - WORD_SIZE_ARM) { GBALog(gba, GBA_LOG_WARN, "Savestate created using a differently sized version of the ROM"); return; }