From 60a2dd861638f5389dc34d8267348eb3adf5e06f Mon Sep 17 00:00:00 2001 From: Chris Miles Date: Wed, 2 Apr 2025 19:22:40 -0500 Subject: [PATCH] [Crash] Fix rarer exception crash issue in PlayerEventLogs::ProcessBatchQueue (#4835) --- common/events/player_event_logs.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/common/events/player_event_logs.cpp b/common/events/player_event_logs.cpp index c35523a36..6f4daf4eb 100644 --- a/common/events/player_event_logs.cpp +++ b/common/events/player_event_logs.cpp @@ -81,7 +81,7 @@ void PlayerEventLogs::Init() if (!settings_to_insert.empty()) { PlayerEventLogSettingsRepository::ReplaceMany(*m_database, settings_to_insert); } - + bool processing_in_world = !RuleB(Logging, PlayerEventsQSProcess) && IsWorld(); bool processing_in_qs = RuleB(Logging, PlayerEventsQSProcess) && IsQueryServ(); @@ -181,9 +181,17 @@ void PlayerEventLogs::ProcessBatchQueue() // Helper to deserialize event data auto Deserialize = [](const std::string &data, auto &out) { - std::stringstream ss(data); - cereal::JSONInputArchive ar(ss); - out.serialize(ar); + if (!Strings::IsValidJson(data)) { + return; + } + + // cpp exceptions are terrible, don't ever use them + try { + std::stringstream ss(data); + cereal::JSONInputArchive ar(ss); + out.serialize(ar); + } + catch (const std::exception &e) {} }; // Helper to assign ETL table ID