diff options
| author | Mai <mai.iam2048@gmail.com> | 2023-12-10 09:12:18 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-12-10 09:12:18 -0500 |
| commit | f249e414ad7adcb397a7d644c057f1cb2a8e62ba (patch) | |
| tree | ec6a1f6d45671ec2d181a8e0490ea49664a74f7f /Source | |
| parent | c23febe94743aa0e887e59a951955eadeb8082bc (diff) | |
| parent | 8194b53166f8bd2852b9d183b4f549a0ed292f5e (diff) | |
Merge pull request #12366 from AdmiralCurtiss/exi-ipl-fixes
HW/CEXIIPL: Various fixes.
Diffstat (limited to 'Source')
| -rw-r--r-- | Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp b/Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp index dddcee0077..9209cccbf4 100644 --- a/Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp +++ b/Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp @@ -111,8 +111,9 @@ CEXIIPL::CEXIIPL(Core::System& system) : IEXIDevice(system) { // Descramble the encrypted section (contains BS1 and BS2) Descrambler(&m_rom[0x100], 0x1afe00); - // yay for null-terminated strings - const std::string_view name{reinterpret_cast<char*>(m_rom.get())}; + + const std::string_view name{reinterpret_cast<char*>(m_rom.get()), + strnlen(reinterpret_cast<char*>(m_rom.get()), 0x100)}; INFO_LOG_FMT(BOOT, "Loaded bootrom: {}", name); } else @@ -159,13 +160,18 @@ void CEXIIPL::DoState(PointerWrap& p) bool CEXIIPL::LoadFileToIPL(const std::string& filename, u32 offset) { + if (offset >= ROM_SIZE) + return false; + File::IOFile stream(filename, "rb"); if (!stream) return false; - u64 filesize = stream.GetSize(); + const u64 filesize = stream.GetSize(); + if (offset >= filesize) + return false; - if (!stream.ReadBytes(&m_rom[offset], filesize)) + if (!stream.ReadBytes(&m_rom[offset], std::min<u64>(filesize, ROM_SIZE) - offset)) return false; m_fonts_loaded = true; @@ -234,8 +240,11 @@ void CEXIIPL::LoadFontFile(const std::string& filename, u32 offset) INFO_LOG_FMT(BOOT, "Found IPL dump, loading {} font from {}", (offset == 0x1aff00) ? "Shift JIS" : "Windows-1252", ipl_rom_path); - stream.Seek(offset, File::SeekOrigin::Begin); - stream.ReadBytes(&m_rom[offset], fontsize); + if (!stream.Seek(offset, File::SeekOrigin::Begin) || !stream.ReadBytes(&m_rom[offset], fontsize)) + { + WARN_LOG_FMT(BOOT, "Failed to read font from IPL dump."); + return; + } m_fonts_loaded = true; } |
