From 45828058f4a5e235e9caa9861027f3a9e1682fae Mon Sep 17 00:00:00 2001
From: Tobias Markmann <tm@ayena.de>
Date: Tue, 26 Jan 2016 16:46:00 +0100
Subject: Fix ASAN reported heap-use-after-free in FileTransferTest

Test-Information:

./scons test=system passes without any ASAN reports on OS X
10.11.3.

Change-Id: I6825414e2f3c5e5aec48289395f44ccdc14d8f95

diff --git a/Swiften/QA/FileTransferTest/FileTransferTest.cpp b/Swiften/QA/FileTransferTest/FileTransferTest.cpp
index 13b6eff..8597033 100644
--- a/Swiften/QA/FileTransferTest/FileTransferTest.cpp
+++ b/Swiften/QA/FileTransferTest/FileTransferTest.cpp
@@ -96,8 +96,7 @@ class FileTransferTest {
 			delete receiverTracer_;
 
 			// Free file-transfer objects so file handles are closed and files can be removed afterwards.
-			incomingFileTransfers_.clear();
-			outgoingFileTransfer_.reset();
+			assert(!outgoingFileTransfer_ && incomingFileTransfers_.empty());
 
 			if(boost::filesystem::exists(sendFilePath_)) {
 				boost::filesystem::remove(sendFilePath_);
@@ -189,6 +188,11 @@ class FileTransferTest {
 			if (error) {
 				std::cout << this << " " << "handleSenderDisconnected: error: " << error.get() << std::endl;
 			}
+
+			// All file-transfers related to a Client instance need to be freed
+			// *before* freeing the Client instance.
+			outgoingFileTransfer_.reset();
+
 			sender_.reset();
 			if (!sender_ && !receiver_) {
 				eventLoop->stop();
@@ -199,6 +203,11 @@ class FileTransferTest {
 			if (error) {
 				std::cout << this << " " << "handleReceiverDisconnected: error: " << error.get() << std::endl;
 			}
+
+			// All file-transfers related to a Client instance need to be freed
+			// *before* freeing the Client instance.
+			incomingFileTransfers_.clear();
+
 			receiver_.reset();
 			if (!sender_ && !receiver_) {
 				eventLoop->stop();
-- 
cgit v0.10.2-6-g49f6