diff options
author | Treeston <treeston.mmoc@gmail.com> | 2020-08-21 01:19:28 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-02-04 00:27:11 +0100 |
commit | c6582096ab0d80d67bbbe055468f1ca3e3ab9b2b (patch) | |
tree | 5a0abeeae6b9a9bbaa1d7fe7423dfca163bed7eb /src/server/game/Warden/WardenCheckMgr.cpp | |
parent | b5d0a94ead71290ac5701ea21b4a507d16f00182 (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.cpp | 21 |
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)); |