From 89b0ab2d22db510e799e6f9619e8c8e0678f13ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Mon, 30 Dec 2019 10:48:11 +0100 Subject: StringUtil: Add IsPrintableCharacter and use it Add a function that safely returns whether a character is printable i.e. whether 0x20 <= c <= 0x7e is true. This is done in several places in our codebase and it's easy to run into undefined behaviour if the C version defined in is used instead of this one, since its behaviour is undefined if the character is not representable as an unsigned char. This fixes MemoryViewWidget. --- Source/Core/DiscIO/VolumeWad.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'Source/Core/DiscIO/VolumeWad.cpp') diff --git a/Source/Core/DiscIO/VolumeWad.cpp b/Source/Core/DiscIO/VolumeWad.cpp index e471edcd1d..584ae3b5b7 100644 --- a/Source/Core/DiscIO/VolumeWad.cpp +++ b/Source/Core/DiscIO/VolumeWad.cpp @@ -5,7 +5,6 @@ #include #include #include -#include #include #include #include @@ -261,8 +260,7 @@ std::string VolumeWAD::GetMakerID(const Partition& partition) const return "00"; // Some weird channels use 0x0000 in place of the MakerID, so we need a check here - const std::locale& c_locale = std::locale::classic(); - if (!std::isprint(temp[0], c_locale) || !std::isprint(temp[1], c_locale)) + if (!IsPrintableCharacter(temp[0]) || !IsPrintableCharacter(temp[1])) return "00"; return DecodeString(temp); -- cgit v1.2.3