diff options
| author | Léo Lam <leo@leolam.fr> | 2020-12-14 03:18:45 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-12-14 03:18:45 +0100 |
| commit | 214ea8ff181300e5f130bafc1eca72ff345c481d (patch) | |
| tree | a79c1c6c7b84bb522d1af0481966b1a49dcd5b04 /Source/Core | |
| parent | 3634508e46d8db61b0c8dadb452f546f17ddd88e (diff) | |
| parent | 668b8d60c8ebeeb0a60a0e3b386f79325cbafbbf (diff) | |
Merge pull request #9328 from AdmiralCurtiss/memory-view-crash
Core/AddressSpace: Return null accessors when no game is running to prevent out-of-bounds memory accesses.
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Core/HW/AddressSpace.cpp | 10 | ||||
| -rw-r--r-- | Source/Core/Core/HW/AddressSpace.h | 1 | ||||
| -rw-r--r-- | Source/Core/Core/HW/HW.cpp | 1 |
3 files changed, 12 insertions, 0 deletions
diff --git a/Source/Core/Core/HW/AddressSpace.cpp b/Source/Core/Core/HW/AddressSpace.cpp index 0506db7687..af60db1d04 100644 --- a/Source/Core/Core/HW/AddressSpace.cpp +++ b/Source/Core/Core/HW/AddressSpace.cpp @@ -374,9 +374,13 @@ static SmallBlockAccessors s_fake_address_space_accessors; static CompositeAddressSpaceAccessors s_physical_address_space_accessors_gcn; static CompositeAddressSpaceAccessors s_physical_address_space_accessors_wii; static NullAccessors s_null_accessors; +static bool s_initialized = false; Accessors* GetAccessors(Type address_space) { + if (!s_initialized) + return &s_null_accessors; + // default to effective switch (address_space) { @@ -420,6 +424,12 @@ void Init() s_physical_address_space_accessors_gcn = {{0x00000000, &s_mem1_address_space_accessors}}; s_physical_address_space_accessors_wii = {{0x00000000, &s_mem1_address_space_accessors}, {0x10000000, &s_mem2_address_space_accessors}}; + s_initialized = true; +} + +void Shutdown() +{ + s_initialized = false; } } // namespace AddressSpace diff --git a/Source/Core/Core/HW/AddressSpace.h b/Source/Core/Core/HW/AddressSpace.h index c1ed71ed20..0df5c1ee40 100644 --- a/Source/Core/Core/HW/AddressSpace.h +++ b/Source/Core/Core/HW/AddressSpace.h @@ -48,5 +48,6 @@ struct Accessors Accessors* GetAccessors(Type address_space); void Init(); +void Shutdown(); } // namespace AddressSpace diff --git a/Source/Core/Core/HW/HW.cpp b/Source/Core/Core/HW/HW.cpp index 3fcaebe863..654164d960 100644 --- a/Source/Core/Core/HW/HW.cpp +++ b/Source/Core/Core/HW/HW.cpp @@ -70,6 +70,7 @@ void Shutdown() CPU::Shutdown(); DVDInterface::Shutdown(); DSP::Shutdown(); + AddressSpace::Shutdown(); Memory::Shutdown(); ExpansionInterface::Shutdown(); SerialInterface::Shutdown(); |
