diff options
author | StapleButter <thetotalworm@gmail.com> | 2017-02-05 17:45:17 +0100 |
---|---|---|
committer | StapleButter <thetotalworm@gmail.com> | 2017-02-05 17:45:17 +0100 |
commit | e88cf1b43d554e16ca8f5ba67c7737231c935f0e (patch) | |
tree | 60189ab56a9f4f83888c4b74e8ecf6e29004249d /NDSCart.cpp | |
parent | ff3b60bc9338ae9753c0f08d38492484f6ed81c6 (diff) |
apparently when you set an out-of-bounds address for EEPROM, it should wrap around
TODO: check if it also happens with Flash
also fix shit that could have later turned into memory leaks
Diffstat (limited to 'NDSCart.cpp')
-rw-r--r-- | NDSCart.cpp | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/NDSCart.cpp b/NDSCart.cpp index 3bfc814..523f575 100644 --- a/NDSCart.cpp +++ b/NDSCart.cpp @@ -56,6 +56,7 @@ void Write_Discover(u8 val, bool islast); void Init() { SRAM = NULL; + Discover_Buffer = NULL; } void Reset() @@ -66,6 +67,7 @@ void Reset() void LoadSave(char* path) { if (SRAM) delete[] SRAM; + if (Discover_Buffer) delete[] Discover_Buffer; strncpy(SRAMPath, path, 255); SRAMPath[255] = '\0'; @@ -181,6 +183,8 @@ void SetMemoryType() } CurCmd = prev_cmd; + + delete[] Discover_Buffer; } void Write_Discover(u8 val, bool islast) @@ -272,9 +276,7 @@ void Write_EEPROM(u8 val, bool islast) } else { - if (Addr < SRAMLength) - SRAM[Addr] = val; - + SRAM[Addr & (SRAMLength-1)] = val; Addr++; } break; @@ -288,11 +290,7 @@ void Write_EEPROM(u8 val, bool islast) } else { - if (Addr >= SRAMLength) - Data = 0; - else - Data = SRAM[Addr]; - + Data = SRAM[Addr & (SRAMLength-1)]; Addr++; } break; @@ -321,6 +319,7 @@ void Write_Flash(u8 val, bool islast) } else { + // CHECKME: does Flash also wraparound when the address is out of bounds? if (Addr >= SRAMLength) Data = 0; else |