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));