From a729842a1361a5bb4226d95cd4d1e51afe7b6f2f Mon Sep 17 00:00:00 2001 From: clobber Date: Thu, 21 Nov 2019 14:51:30 -0600 Subject: [PATCH] Fix bit shift overflow when reading cartridge size from header `left shift count >= width of type` With optimization on, `cartridge_size` will result in garbage/undefined behavior and break loading of games not found in the database, because the size will always be > 131072 and wrongly identify `cartridge_type` as `CARTRIDGE_TYPE_SUPERCART_LARGE` --- Core/Cartridge.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Core/Cartridge.cpp b/Core/Cartridge.cpp index 0334239..b7a631f 100644 --- a/Core/Cartridge.cpp +++ b/Core/Cartridge.cpp @@ -94,7 +94,7 @@ static void cartridge_ReadHeader(const byte* header) { } cartridge_title = temp; - cartridge_size = header[49] << 32; + cartridge_size = header[49] << 24; cartridge_size |= header[50] << 16; cartridge_size |= header[51] << 8; cartridge_size |= header[52];