From b9b2ca63119127b2d59be2b2110d83e8bba85f50 Mon Sep 17 00:00:00 2001 From: Ronan Abhamon Date: Fri, 9 Feb 2018 10:57:25 +0100 Subject: [PATCH] feat(MainDb): add a security to delete basic chat room on migration when peer sip address is a server sip address chat room --- src/db/main-db.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/db/main-db.cpp b/src/db/main-db.cpp index 943426029..4b507cb6e 100644 --- a/src/db/main-db.cpp +++ b/src/db/main-db.cpp @@ -89,8 +89,10 @@ public: } catch (const soci::soci_error &e) { lWarning() << "Catched exception in MainDb::" << info.name << "."; soci::soci_error::error_category category = e.get_error_category(); - if ((category == soci::soci_error::connection_error - || category == soci::soci_error::unknown) && info.mainDb->forceReconnect()) { + if ( + (category == soci::soci_error::connection_error || category == soci::soci_error::unknown) && + info.mainDb->forceReconnect() + ) { mResult = mFunction(); return; } @@ -2528,6 +2530,19 @@ void MainDb::migrateBasicToClientGroupChatRoom ( const long long &localSipAddressId = d->insertSipAddress(newChatRoomId.getLocalAddress().asString()); const int &capabilities = clientGroupChatRoom->getCapabilities(); + { + shared_ptr buggyChatRoom = getCore()->findChatRoom(newChatRoomId); + if (buggyChatRoom) { + lError() << "Chat room was found with the same chat room id of a new migrated ClientGroupChatRoom!!!"; + AbstractChatRoom::CapabilitiesMask capabilities = buggyChatRoom->getCapabilities(); + if (capabilities & AbstractChatRoom::Capabilities::Basic) { + lError() << "Delete invalid basic chat room..."; + Core::deleteChatRoom(buggyChatRoom); + } else + lError() << "Unable to delete invalid chat room with capabilities: " << capabilities << "."; + } + } + *session << "UPDATE chat_room" " SET capabilities = :capabilities," " peer_sip_address_id = :peerSipAddressId,"