From f41ea1296b4cb51f314a048db0b821829a631dc1 Mon Sep 17 00:00:00 2001 From: "Herman S." <429230+has207@users.noreply.github.com> Date: Mon, 20 Oct 2025 11:35:07 +0900 Subject: [PATCH] [x64/Debug] Fix TrapDebugPrint to properly terminate string --- src/xenia/cpu/backend/x64/x64_emitter.cc | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/xenia/cpu/backend/x64/x64_emitter.cc b/src/xenia/cpu/backend/x64/x64_emitter.cc index 51e9847fd..9b400c58f 100644 --- a/src/xenia/cpu/backend/x64/x64_emitter.cc +++ b/src/xenia/cpu/backend/x64/x64_emitter.cc @@ -437,15 +437,22 @@ uint64_t TrapDebugPrint(void* raw_context, uint64_t address) { auto thread_state = reinterpret_cast(raw_context)->thread_state; uint32_t str_ptr = uint32_t(thread_state->context()->r[3]); - // uint16_t str_len = uint16_t(thread_state->context()->r[4]); + uint32_t str_length = uint32_t(thread_state->context()->r[4]); + auto str = thread_state->memory()->TranslateVirtual(str_ptr); - // TODO(benvanik): truncate to length? - XELOGD("(DebugPrint) {}", str); + + // Allocate temporary buffer and null-terminate to respect length parameter + char* string_tmp = new char[str_length + 1]; + std::memcpy(string_tmp, str, str_length); + string_tmp[str_length] = 0; + + XELOGD("(DebugPrint) {}", string_tmp); if (cvars::debugprint_trap_log) { - debugging::DebugPrint("(DebugPrint) {}", str); + debugging::DebugPrint("(DebugPrint) {}", string_tmp); } + delete[] string_tmp; return 0; }