summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Markmann <tm@ayena.de>2015-06-30 07:02:01 (GMT)
committerKevin Smith <kevin.smith@isode.com>2015-07-07 19:58:12 (GMT)
commit799a7ac203dc2576872894dfdd1adb5cdbbacf7b (patch)
treee0242decf49222b83674143cf04f61c3dc01bc35
parentabd96284e162b3594bd0fc90a5da6b78709dee23 (diff)
downloadswift-799a7ac203dc2576872894dfdd1adb5cdbbacf7b.zip
swift-799a7ac203dc2576872894dfdd1adb5cdbbacf7b.tar.bz2
Fix memory leaks reported by ASAN
Test-Information: Tested on Elementary OS with a LLVM/Clang 3.7.0 build. With this patch the reports for the fixed locations are gone. Change-Id: I0260fc85ad662335a69ace331f51ebe2f864ef97
-rw-r--r--Swiften/FileTransfer/IncomingJingleFileTransfer.cpp17
-rw-r--r--Swiften/FileTransfer/JingleFileTransfer.cpp19
-rw-r--r--Swiften/FileTransfer/JingleFileTransfer.h6
-rw-r--r--Swiften/FileTransfer/OutgoingJingleFileTransfer.cpp26
-rw-r--r--Swiften/FileTransfer/UnitTest/IncomingJingleFileTransferTest.cpp33
-rw-r--r--Swiften/FileTransfer/UnitTest/OutgoingJingleFileTransferTest.cpp11
6 files changed, 68 insertions, 44 deletions
diff --git a/Swiften/FileTransfer/IncomingJingleFileTransfer.cpp b/Swiften/FileTransfer/IncomingJingleFileTransfer.cpp
index 877b2fd..39da46f 100644
--- a/Swiften/FileTransfer/IncomingJingleFileTransfer.cpp
+++ b/Swiften/FileTransfer/IncomingJingleFileTransfer.cpp
@@ -12,20 +12,20 @@
12#include <boost/smart_ptr/make_shared.hpp> 12#include <boost/smart_ptr/make_shared.hpp>
13 13
14#include <Swiften/Base/Log.h> 14#include <Swiften/Base/Log.h>
15#include <Swiften/StringCodecs/Base64.h>
16#include <Swiften/Base/foreach.h> 15#include <Swiften/Base/foreach.h>
17#include <Swiften/Jingle/JingleSession.h> 16#include <Swiften/Elements/JingleFileTransferDescription.h>
17#include <Swiften/Elements/JingleFileTransferHash.h>
18#include <Swiften/Elements/JingleIBBTransportPayload.h> 18#include <Swiften/Elements/JingleIBBTransportPayload.h>
19#include <Swiften/Elements/JingleS5BTransportPayload.h> 19#include <Swiften/Elements/JingleS5BTransportPayload.h>
20#include <Swiften/Elements/JingleFileTransferHash.h>
21#include <Swiften/FileTransfer/IncrementalBytestreamHashCalculator.h>
22#include <Swiften/FileTransfer/FileTransferTransporter.h> 20#include <Swiften/FileTransfer/FileTransferTransporter.h>
23#include <Swiften/FileTransfer/FileTransferTransporterFactory.h> 21#include <Swiften/FileTransfer/FileTransferTransporterFactory.h>
22#include <Swiften/FileTransfer/IncrementalBytestreamHashCalculator.h>
23#include <Swiften/FileTransfer/TransportSession.h>
24#include <Swiften/FileTransfer/WriteBytestream.h> 24#include <Swiften/FileTransfer/WriteBytestream.h>
25#include <Swiften/Elements/JingleFileTransferDescription.h> 25#include <Swiften/Jingle/JingleSession.h>
26#include <Swiften/Network/TimerFactory.h> 26#include <Swiften/Network/TimerFactory.h>
27#include <Swiften/Queries/GenericRequest.h> 27#include <Swiften/Queries/GenericRequest.h>
28#include <Swiften/FileTransfer/TransportSession.h> 28#include <Swiften/StringCodecs/Base64.h>
29 29
30using namespace Swift; 30using namespace Swift;
31 31
@@ -56,6 +56,8 @@ IncomingJingleFileTransfer::IncomingJingleFileTransfer(
56} 56}
57 57
58IncomingJingleFileTransfer::~IncomingJingleFileTransfer() { 58IncomingJingleFileTransfer::~IncomingJingleFileTransfer() {
59 delete hashCalculator;
60 hashCalculator = NULL;
59} 61}
60 62
61void IncomingJingleFileTransfer::accept( 63void IncomingJingleFileTransfer::accept(
@@ -334,8 +336,7 @@ void IncomingJingleFileTransfer::stopAll() {
334 case Finished: SWIFT_LOG(warning) << "Already finished" << std::endl; break; 336 case Finished: SWIFT_LOG(warning) << "Already finished" << std::endl; break;
335 } 337 }
336 if (state != Initial) { 338 if (state != Initial) {
337 delete transporter; 339 removeTransporter();
338 transporter = NULL;
339 } 340 }
340} 341}
341 342
diff --git a/Swiften/FileTransfer/JingleFileTransfer.cpp b/Swiften/FileTransfer/JingleFileTransfer.cpp
index dbc4391..cf67a67 100644
--- a/Swiften/FileTransfer/JingleFileTransfer.cpp
+++ b/Swiften/FileTransfer/JingleFileTransfer.cpp
@@ -8,13 +8,13 @@
8 8
9#include <boost/typeof/typeof.hpp> 9#include <boost/typeof/typeof.hpp>
10 10
11#include <Swiften/Base/Log.h>
11#include <Swiften/Base/foreach.h> 12#include <Swiften/Base/foreach.h>
12#include <Swiften/JID/JID.h>
13#include <Swiften/Crypto/CryptoProvider.h> 13#include <Swiften/Crypto/CryptoProvider.h>
14#include <Swiften/StringCodecs/Hexify.h>
15#include <Swiften/Jingle/JingleSession.h>
16#include <Swiften/FileTransfer/FileTransferTransporter.h> 14#include <Swiften/FileTransfer/FileTransferTransporter.h>
17#include <Swiften/Base/Log.h> 15#include <Swiften/JID/JID.h>
16#include <Swiften/Jingle/JingleSession.h>
17#include <Swiften/StringCodecs/Hexify.h>
18 18
19using namespace Swift; 19using namespace Swift;
20 20
@@ -213,6 +213,7 @@ void JingleFileTransfer::handleTransportInfoReceived(
213} 213}
214 214
215void JingleFileTransfer::setTransporter(FileTransferTransporter* transporter) { 215void JingleFileTransfer::setTransporter(FileTransferTransporter* transporter) {
216 SWIFT_LOG_ASSERT(!this->transporter, error);
216 this->transporter = transporter; 217 this->transporter = transporter;
217 localTransportCandidatesGeneratedConnection = transporter->onLocalCandidatesGenerated.connect( 218 localTransportCandidatesGeneratedConnection = transporter->onLocalCandidatesGenerated.connect(
218 boost::bind(&JingleFileTransfer::handleLocalTransportCandidatesGenerated, this, _1, _2, _3)); 219 boost::bind(&JingleFileTransfer::handleLocalTransportCandidatesGenerated, this, _1, _2, _3));
@@ -222,3 +223,13 @@ void JingleFileTransfer::setTransporter(FileTransferTransporter* transporter) {
222 boost::bind(&JingleFileTransfer::handleProxyActivateFinished, this, _1, _2)); 223 boost::bind(&JingleFileTransfer::handleProxyActivateFinished, this, _1, _2));
223} 224}
224 225
226void JingleFileTransfer::removeTransporter() {
227 if (transporter) {
228 localTransportCandidatesGeneratedConnection.release();
229 remoteTransportCandidateSelectFinishedConnection.release();
230 proxyActivatedConnection.release();
231 delete transporter;
232 transporter = NULL;
233 }
234}
235
diff --git a/Swiften/FileTransfer/JingleFileTransfer.h b/Swiften/FileTransfer/JingleFileTransfer.h
index aabeec2..16a55c6 100644
--- a/Swiften/FileTransfer/JingleFileTransfer.h
+++ b/Swiften/FileTransfer/JingleFileTransfer.h
@@ -6,10 +6,11 @@
6 6
7#pragma once 7#pragma once
8 8
9#include <Swiften/Base/API.h> 9#include <vector>
10 10
11#include <boost/shared_ptr.hpp> 11#include <boost/shared_ptr.hpp>
12#include <vector> 12
13#include <Swiften/Base/API.h>
13#include <Swiften/Base/boost_bsignals.h> 14#include <Swiften/Base/boost_bsignals.h>
14#include <Swiften/Elements/ErrorPayload.h> 15#include <Swiften/Elements/ErrorPayload.h>
15#include <Swiften/Elements/JingleS5BTransportPayload.h> 16#include <Swiften/Elements/JingleS5BTransportPayload.h>
@@ -64,6 +65,7 @@ namespace Swift {
64 typedef std::map<std::string, JingleS5BTransportPayload::Candidate> CandidateMap; 65 typedef std::map<std::string, JingleS5BTransportPayload::Candidate> CandidateMap;
65 66
66 void setTransporter(FileTransferTransporter* transporter); 67 void setTransporter(FileTransferTransporter* transporter);
68 void removeTransporter();
67 void fillCandidateMap( 69 void fillCandidateMap(
68 CandidateMap& map, 70 CandidateMap& map,
69 const std::vector<JingleS5BTransportPayload::Candidate>&); 71 const std::vector<JingleS5BTransportPayload::Candidate>&);
diff --git a/Swiften/FileTransfer/OutgoingJingleFileTransfer.cpp b/Swiften/FileTransfer/OutgoingJingleFileTransfer.cpp
index aabbd2d..5c18b13 100644
--- a/Swiften/FileTransfer/OutgoingJingleFileTransfer.cpp
+++ b/Swiften/FileTransfer/OutgoingJingleFileTransfer.cpp
@@ -5,7 +5,7 @@
5 */ 5 */
6 6
7/* 7/*
8 * Copyright (C) 2013-2015 Isode Limited. 8 * Copyright (c) 2013-2015 Isode Limited.
9 * All rights reserved. 9 * All rights reserved.
10 * See the COPYING file for more information. 10 * See the COPYING file for more information.
11 */ 11 */
@@ -21,25 +21,24 @@
21#include <boost/smart_ptr/make_shared.hpp> 21#include <boost/smart_ptr/make_shared.hpp>
22#include <boost/typeof/typeof.hpp> 22#include <boost/typeof/typeof.hpp>
23 23
24#include <Swiften/Base/foreach.h>
25#include <Swiften/Base/IDGenerator.h> 24#include <Swiften/Base/IDGenerator.h>
26#include <Swiften/Jingle/JingleContentID.h> 25#include <Swiften/Base/Log.h>
27#include <Swiften/Jingle/JingleSession.h> 26#include <Swiften/Base/foreach.h>
27#include <Swiften/Crypto/CryptoProvider.h>
28#include <Swiften/Elements/JingleFileTransferDescription.h> 28#include <Swiften/Elements/JingleFileTransferDescription.h>
29#include <Swiften/Elements/JingleFileTransferHash.h> 29#include <Swiften/Elements/JingleFileTransferHash.h>
30#include <Swiften/Elements/JingleTransportPayload.h>
31#include <Swiften/Elements/JingleIBBTransportPayload.h> 30#include <Swiften/Elements/JingleIBBTransportPayload.h>
32#include <Swiften/Elements/JingleS5BTransportPayload.h> 31#include <Swiften/Elements/JingleS5BTransportPayload.h>
33#include <Swiften/FileTransfer/IncrementalBytestreamHashCalculator.h> 32#include <Swiften/Elements/JingleTransportPayload.h>
34#include <Swiften/FileTransfer/FileTransferTransporter.h> 33#include <Swiften/FileTransfer/FileTransferTransporter.h>
35#include <Swiften/FileTransfer/FileTransferTransporterFactory.h> 34#include <Swiften/FileTransfer/FileTransferTransporterFactory.h>
35#include <Swiften/FileTransfer/IncrementalBytestreamHashCalculator.h>
36#include <Swiften/FileTransfer/ReadBytestream.h> 36#include <Swiften/FileTransfer/ReadBytestream.h>
37#include <Swiften/FileTransfer/TransportSession.h> 37#include <Swiften/FileTransfer/TransportSession.h>
38#include <Swiften/Crypto/CryptoProvider.h> 38#include <Swiften/Jingle/JingleContentID.h>
39#include <Swiften/Jingle/JingleSession.h>
39#include <Swiften/Network/TimerFactory.h> 40#include <Swiften/Network/TimerFactory.h>
40 41
41#include <Swiften/Base/Log.h>
42
43using namespace Swift; 42using namespace Swift;
44 43
45static const int DEFAULT_BLOCK_SIZE = 4096; 44static const int DEFAULT_BLOCK_SIZE = 4096;
@@ -78,11 +77,16 @@ OutgoingJingleFileTransfer::~OutgoingJingleFileTransfer() {
78 stream->onRead.disconnect( 77 stream->onRead.disconnect(
79 boost::bind(&IncrementalBytestreamHashCalculator::feedData, hashCalculator, _1)); 78 boost::bind(&IncrementalBytestreamHashCalculator::feedData, hashCalculator, _1));
80 delete hashCalculator; 79 delete hashCalculator;
80 hashCalculator = NULL;
81 removeTransporter();
81} 82}
82 83
83void OutgoingJingleFileTransfer::start() { 84void OutgoingJingleFileTransfer::start() {
84 SWIFT_LOG(debug) << std::endl; 85 SWIFT_LOG(debug) << std::endl;
85 if (state != Initial) { SWIFT_LOG(warning) << "Incorrect state" << std::endl; return; } 86 if (state != Initial) {
87 SWIFT_LOG(warning) << "Incorrect state" << std::endl;
88 return;
89 }
86 90
87 setTransporter(transporterFactory->createInitiatorTransporter(getInitiator(), getResponder(), options)); 91 setTransporter(transporterFactory->createInitiatorTransporter(getInitiator(), getResponder(), options));
88 setState(GeneratingInitialLocalCandidates); 92 setState(GeneratingInitialLocalCandidates);
@@ -290,7 +294,7 @@ void OutgoingJingleFileTransfer::stopAll() {
290 case Finished: SWIFT_LOG(warning) << "Already finished" << std::endl; break; 294 case Finished: SWIFT_LOG(warning) << "Already finished" << std::endl; break;
291 } 295 }
292 if (state != Initial) { 296 if (state != Initial) {
293 delete transporter; 297 removeTransporter();
294 } 298 }
295} 299}
296 300
diff --git a/Swiften/FileTransfer/UnitTest/IncomingJingleFileTransferTest.cpp b/Swiften/FileTransfer/UnitTest/IncomingJingleFileTransferTest.cpp
index aaf90ea..54d2c88 100644
--- a/Swiften/FileTransfer/UnitTest/IncomingJingleFileTransferTest.cpp
+++ b/Swiften/FileTransfer/UnitTest/IncomingJingleFileTransferTest.cpp
@@ -10,39 +10,39 @@
10 * See the COPYING file for more information. 10 * See the COPYING file for more information.
11 */ 11 */
12 12
13#include <cppunit/extensions/HelperMacros.h> 13#include <iostream>
14#include <cppunit/extensions/TestFactoryRegistry.h>
15 14
16#include <boost/smart_ptr/make_shared.hpp> 15#include <boost/smart_ptr/make_shared.hpp>
17 16
17#include <cppunit/extensions/HelperMacros.h>
18#include <cppunit/extensions/TestFactoryRegistry.h>
19
18#include <Swiften/Base/ByteArray.h> 20#include <Swiften/Base/ByteArray.h>
19#include <Swiften/Base/Override.h>
20#include <Swiften/Base/Log.h> 21#include <Swiften/Base/Log.h>
22#include <Swiften/Base/Override.h>
21#include <Swiften/Client/DummyStanzaChannel.h> 23#include <Swiften/Client/DummyStanzaChannel.h>
24#include <Swiften/Crypto/CryptoProvider.h>
25#include <Swiften/Crypto/PlatformCryptoProvider.h>
22#include <Swiften/Elements/IBB.h> 26#include <Swiften/Elements/IBB.h>
27#include <Swiften/Elements/JingleFileTransferDescription.h>
23#include <Swiften/Elements/JingleIBBTransportPayload.h> 28#include <Swiften/Elements/JingleIBBTransportPayload.h>
24#include <Swiften/Elements/JingleS5BTransportPayload.h> 29#include <Swiften/Elements/JingleS5BTransportPayload.h>
25#include <Swiften/Elements/JingleFileTransferDescription.h> 30#include <Swiften/EventLoop/DummyEventLoop.h>
26#include <Swiften/FileTransfer/DefaultFileTransferTransporterFactory.h>
27#include <Swiften/FileTransfer/ByteArrayWriteBytestream.h> 31#include <Swiften/FileTransfer/ByteArrayWriteBytestream.h>
32#include <Swiften/FileTransfer/DefaultFileTransferTransporterFactory.h>
28#include <Swiften/FileTransfer/IncomingJingleFileTransfer.h> 33#include <Swiften/FileTransfer/IncomingJingleFileTransfer.h>
29#include <Swiften/FileTransfer/SOCKS5BytestreamRegistry.h>
30#include <Swiften/Network/PlatformNetworkEnvironment.h>
31#include <Swiften/Network/StaticDomainNameResolver.h>
32#include <Swiften/FileTransfer/SOCKS5BytestreamProxiesManager.h> 34#include <Swiften/FileTransfer/SOCKS5BytestreamProxiesManager.h>
35#include <Swiften/FileTransfer/SOCKS5BytestreamRegistry.h>
33#include <Swiften/FileTransfer/SOCKS5BytestreamServerManager.h> 36#include <Swiften/FileTransfer/SOCKS5BytestreamServerManager.h>
34#include <Swiften/Jingle/FakeJingleSession.h> 37#include <Swiften/Jingle/FakeJingleSession.h>
35#include <Swiften/Network/NATTraverser.h>
36#include <Swiften/Network/DummyTimerFactory.h>
37#include <Swiften/EventLoop/DummyEventLoop.h>
38#include <Swiften/Network/DummyConnectionFactory.h> 38#include <Swiften/Network/DummyConnectionFactory.h>
39#include <Swiften/Network/DummyConnectionServerFactory.h> 39#include <Swiften/Network/DummyConnectionServerFactory.h>
40#include <Swiften/Network/DummyTimerFactory.h>
41#include <Swiften/Network/NATTraverser.h>
40#include <Swiften/Network/PlatformNATTraversalWorker.h> 42#include <Swiften/Network/PlatformNATTraversalWorker.h>
43#include <Swiften/Network/PlatformNetworkEnvironment.h>
44#include <Swiften/Network/StaticDomainNameResolver.h>
41#include <Swiften/Queries/IQRouter.h> 45#include <Swiften/Queries/IQRouter.h>
42#include <Swiften/Crypto/CryptoProvider.h>
43#include <Swiften/Crypto/PlatformCryptoProvider.h>
44
45#include <iostream>
46 46
47using namespace Swift; 47using namespace Swift;
48using namespace boost; 48using namespace boost;
@@ -89,8 +89,11 @@ public:
89 89
90 void tearDown() { 90 void tearDown() {
91 delete ftTransporterFactory; 91 delete ftTransporterFactory;
92 delete networkEnvironment;
93 delete natTraverser;
92 delete bytestreamServerManager; 94 delete bytestreamServerManager;
93 delete bytestreamProxy; 95 delete bytestreamProxy;
96 delete serverConnectionFactory;
94 delete connectionFactory; 97 delete connectionFactory;
95 delete timerFactory; 98 delete timerFactory;
96 delete bytestreamRegistry; 99 delete bytestreamRegistry;
diff --git a/Swiften/FileTransfer/UnitTest/OutgoingJingleFileTransferTest.cpp b/Swiften/FileTransfer/UnitTest/OutgoingJingleFileTransferTest.cpp
index 0186e0b..40e7233 100644
--- a/Swiften/FileTransfer/UnitTest/OutgoingJingleFileTransferTest.cpp
+++ b/Swiften/FileTransfer/UnitTest/OutgoingJingleFileTransferTest.cpp
@@ -10,13 +10,15 @@
10 * See the COPYING file for more information. 10 * See the COPYING file for more information.
11 */ 11 */
12 12
13#include <cppunit/extensions/HelperMacros.h> 13#include <iostream>
14#include <cppunit/extensions/TestFactoryRegistry.h>
15 14
16#include <boost/bind.hpp> 15#include <boost/bind.hpp>
17#include <boost/optional.hpp> 16#include <boost/optional.hpp>
18#include <boost/smart_ptr/make_shared.hpp> 17#include <boost/smart_ptr/make_shared.hpp>
19 18
19#include <cppunit/extensions/HelperMacros.h>
20#include <cppunit/extensions/TestFactoryRegistry.h>
21
20#include <Swiften/Base/ByteArray.h> 22#include <Swiften/Base/ByteArray.h>
21#include <Swiften/Base/IDGenerator.h> 23#include <Swiften/Base/IDGenerator.h>
22#include <Swiften/Base/Override.h> 24#include <Swiften/Base/Override.h>
@@ -47,8 +49,6 @@
47#include <Swiften/Network/PlatformNetworkEnvironment.h> 49#include <Swiften/Network/PlatformNetworkEnvironment.h>
48#include <Swiften/Queries/IQRouter.h> 50#include <Swiften/Queries/IQRouter.h>
49 51
50#include <iostream>
51
52using namespace Swift; 52using namespace Swift;
53 53
54class OutgoingJingleFileTransferTest : public CppUnit::TestFixture { 54class OutgoingJingleFileTransferTest : public CppUnit::TestFixture {
@@ -123,10 +123,13 @@ public:
123 123
124 void tearDown() { 124 void tearDown() {
125 delete ftTransportFactory; 125 delete ftTransportFactory;
126 delete networkEnvironment;
127 delete natTraverser;
126 delete bytestreamServerManager; 128 delete bytestreamServerManager;
127 delete s5bProxy; 129 delete s5bProxy;
128 delete idGen; 130 delete idGen;
129 delete s5bRegistry; 131 delete s5bRegistry;
132 delete serverConnectionFactory;
130 delete connectionFactory; 133 delete connectionFactory;
131 delete timerFactory; 134 delete timerFactory;
132 delete eventLoop; 135 delete eventLoop;