From e786d5c8c363043e1e51c5d51183937e07677eb5 Mon Sep 17 00:00:00 2001 From: Gliniak Date: Mon, 22 Dec 2025 18:47:34 +0100 Subject: [PATCH] [XAM] Fixed potantial crash while upserting setting related to missing SPA - Fixed OOR asssertion caused by invalid amount of characters read by from_string --- src/xenia/kernel/xam/user_settings.h | 9 ++++++--- src/xenia/kernel/xam/user_tracker.cc | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/xenia/kernel/xam/user_settings.h b/src/xenia/kernel/xam/user_settings.h index bdc797b7a..6ac2bd0c7 100644 --- a/src/xenia/kernel/xam/user_settings.h +++ b/src/xenia/kernel/xam/user_settings.h @@ -451,15 +451,18 @@ struct GamerPictureKey { char small_tile_id[8]; uint32_t GetTitleId() const { - return string_util::from_string(title_id, true); + return string_util::from_string( + std::string(title_id, std::size(title_id)), true); } uint32_t GetBigTileId() const { - return string_util::from_string(big_tile_id, true); + return string_util::from_string( + std::string(big_tile_id, std::size(big_tile_id)), true); } uint32_t GetSmallTileId() const { - return string_util::from_string(small_tile_id, true); + return string_util::from_string( + std::string(small_tile_id, std::size(small_tile_id)), true); } }; static_assert_size(GamerPictureKey, 0x18); diff --git a/src/xenia/kernel/xam/user_tracker.cc b/src/xenia/kernel/xam/user_tracker.cc index 70cf6d1fa..d851b7f59 100644 --- a/src/xenia/kernel/xam/user_tracker.cc +++ b/src/xenia/kernel/xam/user_tracker.cc @@ -734,7 +734,7 @@ void UserTracker::UpsertSetting(uint64_t xuid, uint32_t title_id, // Sometimes games like to ignore providing expicitly title_id, so we need to // check it. if (!title_id) { - title_id = spa_data_->title_id(); + title_id = spa_data_ ? spa_data_->title_id() : kernel_state()->title_id(); } GpdInfo* info = user->GetGpd(title_id);