diff options
Diffstat (limited to 'Source/Core/DiscIO/Volume.cpp')
| -rw-r--r-- | Source/Core/DiscIO/Volume.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/Source/Core/DiscIO/Volume.cpp b/Source/Core/DiscIO/Volume.cpp index 7ef63f6950..c1942b2aeb 100644 --- a/Source/Core/DiscIO/Volume.cpp +++ b/Source/Core/DiscIO/Volume.cpp @@ -8,6 +8,7 @@ #include <map> #include <memory> #include <optional> +#include <ranges> #include <span> #include <string> #include <type_traits> @@ -43,6 +44,18 @@ std::string Volume::DecodeString(std::span<const char> data) const return GetRegion() == Region::NTSC_J ? SHIFTJISToUTF8(string) : CP1252ToUTF8(string); } +std::string Volume::FilterGameID(std::span<const char> data) +{ + std::string string(data.data(), data.size()); + + // We don't want game IDs to contain characters that are unprintable or might cause path + // traversal. Game IDs normally only contain ASCII uppercase letters and numbers, + // but GNHE5d contains a lowercase letter, so let's allow all ASCII letters and numbers. + std::ranges::replace_if(string, std::not_fn(Common::IsAlnum), '-'); + + return string; +} + template <typename T> static void AddToSyncHash(Common::SHA1::Context* context, const T& data) { |
