diff options
| author | Remko Tronçon <git@el-tramo.be> | 2011-08-28 13:47:15 (GMT) | 
|---|---|---|
| committer | Remko Tronçon <git@el-tramo.be> | 2011-08-28 13:47:15 (GMT) | 
| commit | 7d406bb0c9b36921e5e9fffd3f4e62982c0956ca (patch) | |
| tree | 7b978a66ba5b40e737068e64c0543fd86ca639b0 | |
| parent | 4d9d6d7148c8ff271d67196874c15d4b7ccef869 (diff) | |
| parent | 17c78efa9452fc0619cbd73e124b66bc1f89fa5e (diff) | |
| download | swift-7d406bb0c9b36921e5e9fffd3f4e62982c0956ca.zip swift-7d406bb0c9b36921e5e9fffd3f4e62982c0956ca.tar.bz2  | |
Merge branch 'swift-1.x'
* swift-1.x:
  Check whether disco#info responses are null.
| -rw-r--r-- | Swiften/Disco/CapsManager.cpp | 4 | ||||
| -rw-r--r-- | Swiften/Disco/UnitTest/CapsManagerTest.cpp | 13 | 
2 files changed, 15 insertions, 2 deletions
diff --git a/Swiften/Disco/CapsManager.cpp b/Swiften/Disco/CapsManager.cpp index a24d88d..66eb47e 100644 --- a/Swiften/Disco/CapsManager.cpp +++ b/Swiften/Disco/CapsManager.cpp @@ -51,8 +51,8 @@ void CapsManager::handleStanzaChannelAvailableChanged(bool available) {  void CapsManager::handleDiscoInfoReceived(const JID& from, const std::string& hash, DiscoInfo::ref discoInfo, ErrorPayload::ref error) {  	requestedDiscoInfos.erase(hash); -	if (error || CapsInfoGenerator("").generateCapsInfo(*discoInfo.get()).getVersion() != hash) { -		if (warnOnInvalidHash && !error) { +	if (error || !discoInfo || CapsInfoGenerator("").generateCapsInfo(*discoInfo.get()).getVersion() != hash) { +		if (warnOnInvalidHash && !error &&  discoInfo) {  			std::cerr << "Warning: Caps from " << from.toString() << " do not verify" << std::endl;  		}  		failingCaps.insert(std::make_pair(from, hash)); diff --git a/Swiften/Disco/UnitTest/CapsManagerTest.cpp b/Swiften/Disco/UnitTest/CapsManagerTest.cpp index 699e96f..52b4bf1 100644 --- a/Swiften/Disco/UnitTest/CapsManagerTest.cpp +++ b/Swiften/Disco/UnitTest/CapsManagerTest.cpp @@ -32,6 +32,7 @@ class CapsManagerTest : public CppUnit::TestFixture {  		CPPUNIT_TEST(testReceiveSuccesfulDiscoStoresCaps);  		CPPUNIT_TEST(testReceiveIncorrectVerificationDiscoDoesNotStoreCaps);  		CPPUNIT_TEST(testReceiveFailingDiscoFallsBack); +		CPPUNIT_TEST(testReceiveNoDiscoFallsBack);  		CPPUNIT_TEST(testReceiveFailingFallbackDiscoFallsBack);  		CPPUNIT_TEST(testReceiveSameHashFromFailingUserAfterReconnectRequestsDisco);  		CPPUNIT_TEST(testReconnectResetsFallback); @@ -183,6 +184,18 @@ class CapsManagerTest : public CppUnit::TestFixture {  			CPPUNIT_ASSERT_EQUAL("http://node2.im#" + capsInfo1alt->getVersion(), discoInfo->getNode());  		} +		void testReceiveNoDiscoFallsBack() { +			std::auto_ptr<CapsManager> testling = createManager(); +			sendPresenceWithCaps(user1, capsInfo1); +			sendPresenceWithCaps(user2, capsInfo1alt); +			stanzaChannel->onIQReceived(IQ::createResult(JID("baz@fum.com/dum"), stanzaChannel->sentStanzas[0]->getTo(), stanzaChannel->sentStanzas[0]->getID(), boost::shared_ptr<DiscoInfo>())); + +			CPPUNIT_ASSERT(stanzaChannel->isRequestAtIndex<DiscoInfo>(1, user2, IQ::Get)); +			boost::shared_ptr<DiscoInfo> discoInfo(stanzaChannel->sentStanzas[1]->getPayload<DiscoInfo>()); +			CPPUNIT_ASSERT(discoInfo); +			CPPUNIT_ASSERT_EQUAL("http://node2.im#" + capsInfo1alt->getVersion(), discoInfo->getNode()); +		} +  		void testReceiveFailingFallbackDiscoFallsBack() {  			boost::shared_ptr<CapsManager> testling = createManager();  			sendPresenceWithCaps(user1, capsInfo1);  | 
 Swift