From dbdd30aa0d94c79742a602908890548030088bc9 Mon Sep 17 00:00:00 2001 From: Tobias Markmann Date: Fri, 15 Aug 2014 15:33:59 +0200 Subject: Only allocate BlockResponder and UnblockResponder once. Fixes ASAN heap-used-after-free report. Tested via ASAN, report gone after applying this change. It previously occured during machine sleep/resume or logout/login. Change-Id: I8af6a3c290457a4a98f94486a225f9dfb92ca885 License: This patch is BSD-licensed, see Documentation/Licenses/BSD-simplified.txt for details. diff --git a/Swiften/Client/ClientBlockListManager.cpp b/Swiften/Client/ClientBlockListManager.cpp index d446315..de43631 100644 --- a/Swiften/Client/ClientBlockListManager.cpp +++ b/Swiften/Client/ClientBlockListManager.cpp @@ -125,10 +125,14 @@ void ClientBlockListManager::handleBlockListReceived(boost::shared_ptrsetItems(payload->getItems()); blockList->setState(BlockList::Available); - blockResponder = boost::make_shared(blockList, iqRouter); - blockResponder->start(); - unblockResponder = boost::make_shared(blockList, iqRouter); - unblockResponder->start(); + if (!blockResponder) { + blockResponder = boost::make_shared(blockList, iqRouter); + blockResponder->start(); + } + if (!unblockResponder) { + unblockResponder = boost::make_shared(blockList, iqRouter); + unblockResponder->start(); + } } } -- cgit v0.10.2-6-g49f6