From 850a74207195e82c108cf3fd730f5ae05f8b0130 Mon Sep 17 00:00:00 2001 From: Sandu Liviu Catalin Date: Tue, 24 May 2016 20:57:28 +0300 Subject: [PATCH] Prevent script exceptions from escaping the IRC session callbacks. --- modules/irc/Session.cpp | 38 ++++++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/modules/irc/Session.cpp b/modules/irc/Session.cpp index e50e6fad..9c9bea4f 100644 --- a/modules/irc/Session.cpp +++ b/modules/irc/Session.cpp @@ -638,8 +638,23 @@ void Session::ForwardEvent(Function & listener, CCStr event, CCStr origin, CCStr parameters.SetValue(i, params[i]); } } - // Call the event with the obtained values - listener.Execute< CSStr, CSStr, Array & >(event, origin, parameters); + // Attempt top execute the callback with the obtained values + try + { + listener.Execute< CSStr, CSStr, Array & >(event, origin, parameters); + } + catch (const Sqrat::Exception & e) + { + _SqMod->LogErr("IRC event [%s] => Squirrel error [%s]", event, e.Message().c_str()); + } + catch (const std::exception & e) + { + _SqMod->LogErr("IRC event [%s] => Program error [%s]", event, e.what()); + } + catch (...) + { + _SqMod->LogErr("IRC event [%s] => Unknown error", event); + } } // ------------------------------------------------------------------------------------------------ @@ -667,8 +682,23 @@ void Session::ForwardEvent(Function & listener, Uint32 event, parameters.SetValue(i, params[i]); } } - // Call the event with the obtained values - listener.Execute< Uint32, CSStr, Array & >(event, origin, parameters); + // Attempt top execute the callback with the obtained values + try + { + listener.Execute< Uint32, CSStr, Array & >(event, origin, parameters); + } + catch (const Sqrat::Exception & e) + { + _SqMod->LogErr("IRC event [%s] => Squirrel error [%s]", event, e.Message().c_str()); + } + catch (const std::exception & e) + { + _SqMod->LogErr("IRC event [%s] => Program error [%s]", event, e.what()); + } + catch (...) + { + _SqMod->LogErr("IRC event [%s] => Unknown error", event); + } } // ------------------------------------------------------------------------------------------------