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/DolphinQt/Debugger/MemoryViewWidget.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'Source/Core/DolphinQt/Debugger/MemoryViewWidget.cpp') diff --git a/Source/Core/DolphinQt/Debugger/MemoryViewWidget.cpp b/Source/Core/DolphinQt/Debugger/MemoryViewWidget.cpp index e33a2a8880..5e3d427e96 100644 --- a/Source/Core/DolphinQt/Debugger/MemoryViewWidget.cpp +++ b/Source/Core/DolphinQt/Debugger/MemoryViewWidget.cpp @@ -14,6 +14,7 @@ #include #include +#include "Common/StringUtil.h" #include "Core/Core.h" #include "Core/HW/AddressSpace.h" #include "Core/PowerPC/BreakPoints.h" @@ -169,8 +170,8 @@ void MemoryViewWidget::Update() case Type::ASCII: update_values([&accessors](u32 address) { const char value = accessors->ReadU8(address); - return std::isprint(value) ? QString{QChar::fromLatin1(value)} : - QString{QChar::fromLatin1('.')}; + return IsPrintableCharacter(value) ? QString{QChar::fromLatin1(value)} : + QString{QChar::fromLatin1('.')}; }); break; case Type::U16: -- cgit v1.2.3