From 6df55275b864fefa31122004e74d35ddde6885b6 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Wed, 1 Feb 2017 13:47:03 -0800 Subject: [PATCH] GB: Fix crash when patching ROM --- CHANGES | 1 + src/gb/gb.c | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/CHANGES b/CHANGES index 5c4f6c5db..00a4b642e 100644 --- a/CHANGES +++ b/CHANGES @@ -8,6 +8,7 @@ Bugfixes: - Qt: Fix timing issues on high refresh rate monitors - GBA Savedata: Fix savedata unmasking (fixes mgba.io/i/441) - Util: Fix overflow when loading invalid UPS patches + - GB: Fix crash when patching ROMs Misc: - Qt: Improved HiDPI support - Feature: Support ImageMagick 7 diff --git a/src/gb/gb.c b/src/gb/gb.c index d9c61f9f6..91234a2af 100644 --- a/src/gb/gb.c +++ b/src/gb/gb.c @@ -285,12 +285,16 @@ void GBApplyPatch(struct GB* gb, struct Patch* patch) { if (patchedSize > GB_SIZE_CART_MAX) { patchedSize = GB_SIZE_CART_MAX; } + void* oldRom = gb->memory.rom; gb->memory.rom = anonymousMemoryMap(GB_SIZE_CART_MAX); if (!patch->applyPatch(patch, gb->pristineRom, gb->pristineRomSize, gb->memory.rom, patchedSize)) { mappedMemoryFree(gb->memory.rom, patchedSize); gb->memory.rom = gb->pristineRom; return; } + if (gb->memory.romBase == oldRom) { + gb->memory.romBase = gb->memory.rom; + } gb->memory.romSize = patchedSize; gb->romCrc32 = doCrc32(gb->memory.rom, gb->memory.romSize); }