aboutsummaryrefslogtreecommitdiff
path: root/src/script/lua_api
diff options
context:
space:
mode:
authorSmallJoker <SmallJoker@users.noreply.github.com>2023-04-07 12:49:35 +0200
committerGitHub <noreply@github.com>2023-04-07 12:49:35 +0200
commit9c9309cdbb053598aaf08506928a4824e78b4622 (patch)
treea4162e2af173951d6e815cfb43df3ba182ce8638 /src/script/lua_api
parentd975ebdcb98512c8b7c17af4a95481238a520078 (diff)
downloadminetest-9c9309cdbb053598aaf08506928a4824e78b4622.tar.xz
Lua API: Catch serialization error for chat messages (#13337)
Prevents server errors caused by too long chat messages from the Lua API.
Diffstat (limited to 'src/script/lua_api')
-rw-r--r--src/script/lua_api/l_server.cpp17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/script/lua_api/l_server.cpp b/src/script/lua_api/l_server.cpp
index eff212653..67916e074 100644
--- a/src/script/lua_api/l_server.cpp
+++ b/src/script/lua_api/l_server.cpp
@@ -85,7 +85,14 @@ int ModApiServer::l_chat_send_all(lua_State *L)
// Get server from registry
Server *server = getServer(L);
// Send
- server->notifyPlayers(utf8_to_wide(text));
+ try {
+ server->notifyPlayers(utf8_to_wide(text));
+ } catch (PacketError &e) {
+ warningstream << "Exception caught: " << e.what() << std::endl
+ << script_get_backtrace(L) << std::endl;
+ server->notifyPlayers(utf8_to_wide(std::string("Internal error: ") + e.what()));
+ }
+
return 0;
}
@@ -99,7 +106,13 @@ int ModApiServer::l_chat_send_player(lua_State *L)
// Get server from registry
Server *server = getServer(L);
// Send
- server->notifyPlayer(name, utf8_to_wide(text));
+ try {
+ server->notifyPlayer(name, utf8_to_wide(text));
+ } catch (PacketError &e) {
+ warningstream << "Exception caught: " << e.what() << std::endl
+ << script_get_backtrace(L) << std::endl;
+ server->notifyPlayer(name, utf8_to_wide(std::string("Internal error: ") + e.what()));
+ }
return 0;
}