From 2afa546551407b1a9faf6e21f8cdf720bde88df8 Mon Sep 17 00:00:00 2001 From: Sepalani Date: Sat, 3 Jun 2017 20:06:31 +0100 Subject: [PATCH] HLE: Fix __write_console implementation --- Source/Core/Core/HLE/HLE_OS.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/Source/Core/Core/HLE/HLE_OS.cpp b/Source/Core/Core/HLE/HLE_OS.cpp index aab85ecb6c..74adaa148c 100644 --- a/Source/Core/Core/HLE/HLE_OS.cpp +++ b/Source/Core/Core/HLE/HLE_OS.cpp @@ -65,10 +65,24 @@ void HLE_GeneralDebugPrint() NOTICE_LOG(OSREPORT, "%08x->%08x| %s", LR, PC, SHIFTJISToUTF8(report_message).c_str()); } -// __write_console is slightly abnormal +// __write_console(int fd, const void* buffer, const u32* size) void HLE_write_console() { std::string report_message = GetStringVA(4); + if (PowerPC::HostIsRAMAddress(GPR(5))) + { + u32 size = PowerPC::Read_U32(GPR(5)); + if (size > report_message.size()) + WARN_LOG(OSREPORT, "__write_console uses an invalid size of 0x%08x", size); + else if (size == 0) + WARN_LOG(OSREPORT, "__write_console uses a size of zero"); + else + report_message = report_message.substr(0, size); + } + else + { + ERROR_LOG(OSREPORT, "__write_console uses an unreachable size pointer"); + } NPC = LR;