diff --git a/core/PlayerManager.cpp b/core/PlayerManager.cpp index 8ea58eff..09388bf7 100644 --- a/core/PlayerManager.cpp +++ b/core/PlayerManager.cpp @@ -1556,28 +1556,34 @@ void PlayerManager::ProcessCommandTarget(cmd_target_info_t *info) if (steamIdType > 0) { - const char *search_pattern; - char tmp_pattern[256]; + char new_pattern[256]; if (steamIdType == 2) { size_t p, len; - strcpy(tmp_pattern, "STEAM_"); + strcpy(new_pattern, "STEAM_"); len = strlen(&info->pattern[7]); for (p = 0; p < len; p++) { - tmp_pattern[6 + p] = info->pattern[7 + p]; - if (tmp_pattern[6 + p] == '_') + new_pattern[6 + p] = info->pattern[7 + p]; + if (new_pattern[6 + p] == '_') { - tmp_pattern[6 + p] = ':'; + new_pattern[6 + p] = ':'; } } - tmp_pattern[6 + p] = '\0'; - search_pattern = tmp_pattern; + new_pattern[6 + p] = '\0'; } else { - search_pattern = &info->pattern[1]; + size_t p = 0; + char c; + while ((c = info->pattern[p + 1]) != '\0') + { + new_pattern[p] = (c == '_') ? ':' : c; + ++p; + } + + new_pattern[p] = '\0'; } for (int i = 1; i <= max_clients; i++) @@ -1593,7 +1599,7 @@ void PlayerManager::ProcessCommandTarget(cmd_target_info_t *info) // We want to make it easy for people to be kicked/banned, so don't require validation for command targets. const char *steamId = steamIdType == 2 ? pTarget->GetSteam2Id(false) : pTarget->GetSteam3Id(false); - if (steamId && strcmp(steamId, search_pattern) == 0) + if (steamId && strcmp(steamId, new_pattern) == 0) { if ((info->reason = FilterCommandTarget(pAdmin, pTarget, info->flags)) == COMMAND_TARGET_VALID)