all repos — mgba @ 23d35c4b29849350327f0d1162a18089d1897f90

mGBA Game Boy Advance Emulator

GBA BIOS: Fix HuffUnComp to work when games pass an invalid bit length
Jeffrey Pfau jeffrey@endrift.com
Tue, 13 Jan 2015 20:46:29 -0800
commit

23d35c4b29849350327f0d1162a18089d1897f90

parent

757646ec84c9e20bd0632f22ee07c4175534fb54

2 files changed, 5 insertions(+), 0 deletions(-)

jump to
M CHANGESCHANGES

@@ -28,6 +28,7 @@ - Qt: Fix some cases where key mapping can break if focus is adjusted

- GBA Memory: Filter out top nybble of DMA addresses - Debugger: Fix binary print putting spaces between digits - GBA BIOS: Fix LZ77UnCompVram to use 16-bit loads from decompressed memory + - GBA BIOS: Fix HuffUnComp to work when games pass an invalid bit length Misc: - Qt: Disable sync to video by default - GBA: Exit cleanly on FATAL if the port supports it
M src/gba/gba-bios.csrc/gba/gba-bios.c

@@ -310,6 +310,10 @@ source = source & 0xFFFFFFFC;

uint32_t header = cpu->memory.load32(cpu, source, 0); int remaining = header >> 8; int bits = header & 0xF; + if (bits == 0) { + GBALog(gba, GBA_LOG_GAME_ERROR, "Invalid Huffman bits"); + bits = 8; + } if (32 % bits) { GBALog(gba, GBA_LOG_STUB, "Unimplemented unaligned Huffman"); return;