From 1dc2a85ccc2e3a23b9cd33d1503038223bfae320 Mon Sep 17 00:00:00 2001 From: JosJuice Date: Thu, 2 Nov 2017 21:05:37 +0100 Subject: Avoid UB when reading Wii volume names --- Source/Core/DiscIO/Volume.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'Source/Core/DiscIO/Volume.cpp') diff --git a/Source/Core/DiscIO/Volume.cpp b/Source/Core/DiscIO/Volume.cpp index 9ae87466e2..e95a2b746f 100644 --- a/Source/Core/DiscIO/Volume.cpp +++ b/Source/Core/DiscIO/Volume.cpp @@ -26,17 +26,15 @@ namespace DiscIO const IOS::ES::TicketReader Volume::INVALID_TICKET{}; const IOS::ES::TMDReader Volume::INVALID_TMD{}; -std::map Volume::ReadWiiNames(const std::vector& data) +std::map Volume::ReadWiiNames(const std::vector& data) { std::map names; for (size_t i = 0; i < NUMBER_OF_LANGUAGES; ++i) { - size_t name_start = NAME_BYTES_LENGTH * i; - size_t name_end = name_start + NAME_BYTES_LENGTH; - if (data.size() >= name_end) + const size_t name_start = NAME_CHARS_LENGTH * i; + if (name_start + NAME_CHARS_LENGTH <= data.size()) { - std::string name = UTF16BEToUTF8(reinterpret_cast(data.data() + name_start), - NAME_STRING_LENGTH); + const std::string name = UTF16BEToUTF8(data.data() + name_start, NAME_CHARS_LENGTH); if (!name.empty()) names[static_cast(i)] = name; } -- cgit v1.2.3