From 594e8b8cdd42a962b35d4500235942ac8135505f Mon Sep 17 00:00:00 2001 From: Adrian <78108584+AdrianCassar@users.noreply.github.com> Date: Wed, 17 Dec 2025 19:55:15 +0000 Subject: [PATCH] [XAM] Add null terminator in UserData for WSTRING --- src/xenia/kernel/xam/user_data.cc | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/xenia/kernel/xam/user_data.cc b/src/xenia/kernel/xam/user_data.cc index e64983d74..439a75346 100644 --- a/src/xenia/kernel/xam/user_data.cc +++ b/src/xenia/kernel/xam/user_data.cc @@ -27,10 +27,24 @@ UserData::UserData(X_USER_DATA_TYPE data_type, UserDataTypes user_data) { switch (data_type) { case X_USER_DATA_TYPE::BINARY: extended_data_ = std::get>(user_data); - data_.data.binary.size = static_cast(extended_data_.size()); + + data_.data.binary.size = std::min( + static_cast(extended_data_.size()), kMaxUserDataSize); + + if (extended_data_.size() > kMaxUserDataSize) { + extended_data_.resize(kMaxUserDataSize); + } break; case X_USER_DATA_TYPE::WSTRING: { std::u16string str = std::get(user_data); + uint32_t max_chars = (kMaxUserDataSize / sizeof(char16_t)) - 1; + + if (str.size() > max_chars) { + str.resize(max_chars); + } + + str.push_back(u'\0'); + data_.data.unicode.size = static_cast(string_util::size_in_bytes(str, false));