aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Warden/WardenCheckMgr.cpp
diff options
context:
space:
mode:
authorTreeston <treeston.mmoc@gmail.com>2020-08-21 01:19:28 +0200
committerShauren <shauren.trinity@gmail.com>2022-02-04 00:27:11 +0100
commitc6582096ab0d80d67bbbe055468f1ca3e3ab9b2b (patch)
tree5a0abeeae6b9a9bbaa1d7fe7423dfca163bed7eb /src/server/game/Warden/WardenCheckMgr.cpp
parentb5d0a94ead71290ac5701ea21b4a507d16f00182 (diff)
Core/Warden: Add Lua checks to Warden (PR #25286)
(cherry picked from commit 0531463a3c02d98ed77e9c7689ad7237ecaddc09)
Diffstat (limited to 'src/server/game/Warden/WardenCheckMgr.cpp')
-rw-r--r--src/server/game/Warden/WardenCheckMgr.cpp21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/server/game/Warden/WardenCheckMgr.cpp b/src/server/game/Warden/WardenCheckMgr.cpp
index c4a4d7de49e..7fff6a69cce 100644
--- a/src/server/game/Warden/WardenCheckMgr.cpp
+++ b/src/server/game/Warden/WardenCheckMgr.cpp
@@ -73,6 +73,12 @@ void WardenCheckMgr::LoadWardenChecks()
continue;
}
+ if ((type == LUA_EVAL_CHECK) && (id > 9999))
+ {
+ TC_LOG_ERROR("sql.sql", "Warden Lua check with id %u found in `warden_checks`. Lua checks may have four-digit IDs at most. Skipped.", id);
+ continue;
+ }
+
WardenCheck& wardenCheck = _checks[id];
wardenCheck.CheckId = id;
wardenCheck.Type = type;
@@ -90,13 +96,26 @@ void WardenCheckMgr::LoadWardenChecks()
wardenCheck.Length = fields[5].GetUInt8();
// PROC_CHECK support missing
- if (type == MEM_CHECK || type == MPQ_CHECK || type == LUA_STR_CHECK || type == DRIVER_CHECK || type == MODULE_CHECK)
+ if (type == MEM_CHECK || type == MPQ_CHECK || type == LUA_EVAL_CHECK || type == DRIVER_CHECK || type == MODULE_CHECK)
wardenCheck.Str = fields[6].GetString();
wardenCheck.Comment = fields[7].GetString();
if (wardenCheck.Comment.empty())
wardenCheck.Comment = "Undocumented Check";
+ if (type == LUA_EVAL_CHECK)
+ {
+ if (wardenCheck.Str.size() > WARDEN_MAX_LUA_CHECK_LENGTH)
+ {
+ TC_LOG_ERROR("sql.sql", "Found over-long Lua check for Warden check with id %u in `warden_checks`. Max length is %u. Skipped.", id, WARDEN_MAX_LUA_CHECK_LENGTH);
+ continue;
+ }
+
+ std::string str = fmt::sprintf("%04u", id);
+ ASSERT(str.size() == 4);
+ std::copy(str.begin(), str.end(), wardenCheck.IdStr.begin());
+ }
+
// initialize action with default action from config, this may be overridden later
wardenCheck.Action = WardenActions(sWorld->getIntConfig(CONFIG_WARDEN_CLIENT_FAIL_ACTION));