From e6828af5e7b2c1ad954d7fb23edb7bf1c615e0ab Mon Sep 17 00:00:00 2001 From: Gliniak Date: Thu, 30 Oct 2025 21:54:58 +0100 Subject: [PATCH] [Base] Fixed issue with unnecessary null terminator after reading u16string --- src/xenia/base/string_util.h | 1 + src/xenia/kernel/xam/xam_user.cc | 6 +++--- src/xenia/kernel/xam/xdbf/gpd_info_title.cc | 6 +++--- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/xenia/base/string_util.h b/src/xenia/base/string_util.h index 9d1bfe0a5..3d7d0e9ce 100644 --- a/src/xenia/base/string_util.h +++ b/src/xenia/base/string_util.h @@ -435,6 +435,7 @@ inline std::u16string read_u16string_and_swap(const char16_t* string_ptr) { std::u16string output_str = {}; output_str.resize(input_str.size() + 1); copy_and_swap_truncating(output_str.data(), input_str, input_str.size() + 1); + output_str.pop_back(); // Remove nullptr added by copy_and_swap. return output_str; } diff --git a/src/xenia/kernel/xam/xam_user.cc b/src/xenia/kernel/xam/xam_user.cc index 0169355b4..3440271d2 100644 --- a/src/xenia/kernel/xam/xam_user.cc +++ b/src/xenia/kernel/xam/xam_user.cc @@ -754,17 +754,17 @@ dword_result_t XamParseGamerTileKey_entry(pointer_t key_ptr, return X_ERROR_INVALID_PARAMETER; } - std::string tile_key = xe::to_utf8(string_util::read_u16string_and_swap( + const std::string tile_key = xe::to_utf8(string_util::read_u16string_and_swap( kernel_memory()->TranslateVirtual( key_ptr->data.unicode.ptr))); // Default key size is 24 bytes, but we need to include null terminator - if (tile_key.empty() || tile_key.size() != 25) { + if (tile_key.empty() || tile_key.size() != 24) { return X_ERROR_INVALID_PARAMETER; } const bool is_valid_hex_string = - std::all_of(tile_key.begin(), --tile_key.end(), + std::all_of(tile_key.cbegin(), tile_key.cend(), [](unsigned char c) { return std::isxdigit(c); }); if (!is_valid_hex_string) { diff --git a/src/xenia/kernel/xam/xdbf/gpd_info_title.cc b/src/xenia/kernel/xam/xdbf/gpd_info_title.cc index a5a50a0c6..406c4111a 100644 --- a/src/xenia/kernel/xam/xdbf/gpd_info_title.cc +++ b/src/xenia/kernel/xam/xdbf/gpd_info_title.cc @@ -40,8 +40,8 @@ const char16_t* GpdInfoTitle::GetAchievementDescriptionPtr(const uint32_t id) { return nullptr; } - return reinterpret_cast(title_ptr + - GetAchievementTitle(id).length()); + return reinterpret_cast( + title_ptr + GetAchievementTitle(id).length() + 1); } const char16_t* GpdInfoTitle::GetAchievementUnachievedDescriptionPtr( @@ -52,7 +52,7 @@ const char16_t* GpdInfoTitle::GetAchievementUnachievedDescriptionPtr( } return reinterpret_cast( - title_ptr + GetAchievementDescription(id).length()); + title_ptr + GetAchievementDescription(id).length() + 1); } std::u16string GpdInfoTitle::GetAchievementTitle(const uint32_t id) {