From 78ddf74c0aaf718c748f4a67119541d6569708d7 Mon Sep 17 00:00:00 2001 From: VDm Date: Fri, 11 Apr 2025 21:20:09 +0400 Subject: [PATCH] feat(login): implement trimming of realm name in LoginResponse::HandleRealmData --- src/net/login/LoginResponse.cpp | 57 ++++++++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/src/net/login/LoginResponse.cpp b/src/net/login/LoginResponse.cpp index cc6251b..46556cc 100644 --- a/src/net/login/LoginResponse.cpp +++ b/src/net/login/LoginResponse.cpp @@ -72,7 +72,62 @@ void LoginResponse::HandleRealmData(uint32_t a2, CDataStore* msg) { realm.flags |= 0x80; } - // TODO name manipulation + if (realm.name[0] == '\0') { + continue; + } + + int32_t j = 0; + while (realm.name[j]) { + switch (realm.name[j]) { + case '"': + case '*': + case '/': + case ':': + case '<': + case '>': + case '?': + case '\\': + case '|': { + realm.name[j] = ' '; + break; + } + + default: { + break; + } + } + ++j; + } + + while (j > 0) { + bool stop = false; + switch (realm.name[j - 1]) { + case ' ': + case '"': + case '*': + case '.': + case '/': + case ':': + case '<': + case '>': + case '?': + case '\\': + case '|': { + --j; + break; + } + + default: { + stop = true; + break; + } + } + if (stop) { + break; + } + } + + realm.name[j] = '\0'; } msg->Get(reinterpret_cast(this->uint10));