From 3f74dfef10e9d4151a0061a81cd5b119dda99323 Mon Sep 17 00:00:00 2001 From: Adrian <78108584+AdrianCassar@users.noreply.github.com> Date: Sun, 1 Mar 2026 20:56:03 +0000 Subject: [PATCH] [XAM] Improved gamertag validation --- src/xenia/kernel/xam/profile_manager.cc | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/src/xenia/kernel/xam/profile_manager.cc b/src/xenia/kernel/xam/profile_manager.cc index 51c4a4e49..1d3a10d33 100644 --- a/src/xenia/kernel/xam/profile_manager.cc +++ b/src/xenia/kernel/xam/profile_manager.cc @@ -7,6 +7,8 @@ ****************************************************************************** */ +#include + #include "xenia/kernel/xam/profile_manager.h" #include "xenia/base/logging.h" @@ -596,22 +598,13 @@ bool ProfileManager::DeleteProfile(const uint64_t xuid) { } bool ProfileManager::IsGamertagValid(const std::string gamertag) { - if (gamertag.empty()) { + std::regex pattern(R"(^[A-Za-z][A-Za-z0-9]*( [A-Za-z0-9]+)*$)"); + + if (gamertag.length() < 1 || gamertag.length() > 15) { return false; } - if (gamertag.length() > 15) { - return false; - } - - // Gamertag cannot start with a number. - if (std::isdigit(gamertag.at(0))) { - return false; - } - - return std::find_if(gamertag.cbegin(), gamertag.cend(), [](char c) { - return !(std::isalnum(c) || (c == ' ')); - }) == gamertag.cend(); + return std::regex_match(gamertag, pattern); } } // namespace xam