diff options
-rw-r--r-- | Swiften/Queries/Request.cpp | 2 | ||||
-rw-r--r-- | Swiften/Queries/UnitTest/RequestTest.cpp | 14 |
2 files changed, 15 insertions, 1 deletions
diff --git a/Swiften/Queries/Request.cpp b/Swiften/Queries/Request.cpp index 0ffae26..7832c65 100644 --- a/Swiften/Queries/Request.cpp +++ b/Swiften/Queries/Request.cpp @@ -74,13 +74,13 @@ bool Request::isCorrectSender(const JID& jid) { return jid.equals(receiver_, JID::WithResource); } } bool Request::isAccountJID(const JID& jid) { // If the router's JID is not set, we don't check anything if (!router_->getJID().isValid()) { return true; } - return jid.isValid() ? router_->getJID().equals(jid, JID::WithoutResource) : true; + return jid.isValid() ? router_->getJID().toBare().equals(jid, JID::WithResource) : true; } } diff --git a/Swiften/Queries/UnitTest/RequestTest.cpp b/Swiften/Queries/UnitTest/RequestTest.cpp index b3925dd..75e0a1d 100644 --- a/Swiften/Queries/UnitTest/RequestTest.cpp +++ b/Swiften/Queries/UnitTest/RequestTest.cpp @@ -27,18 +27,19 @@ class RequestTest : public CppUnit::TestFixture { CPPUNIT_TEST(testHandleIQ_Error); CPPUNIT_TEST(testHandleIQ_ErrorWithoutPayload); CPPUNIT_TEST(testHandleIQ_BeforeSend); CPPUNIT_TEST(testHandleIQ_DifferentPayload); CPPUNIT_TEST(testHandleIQ_RawXMLPayload); CPPUNIT_TEST(testHandleIQ_GetWithSameID); CPPUNIT_TEST(testHandleIQ_SetWithSameID); CPPUNIT_TEST(testHandleIQ_IncorrectSender); CPPUNIT_TEST(testHandleIQ_IncorrectSenderForServerQuery); + CPPUNIT_TEST(testHandleIQ_IncorrectOtherResourceSenderForServerQuery); CPPUNIT_TEST(testHandleIQ_ServerRespondsWithDomain); CPPUNIT_TEST(testHandleIQ_ServerRespondsWithBareJID); CPPUNIT_TEST(testHandleIQ_ServerRespondsWithoutFrom); CPPUNIT_TEST_SUITE_END(); public: class MyPayload : public Payload { public: MyPayload(const std::string& s = "") : text_(s) {} @@ -237,18 +238,31 @@ class RequestTest : public CppUnit::TestFixture { testling.send(); channel_->onIQReceived(createResponse(JID("foo@bar.com/baz"), "test-id")); CPPUNIT_ASSERT_EQUAL(0, responsesReceived_); CPPUNIT_ASSERT_EQUAL(0, static_cast<int>(receivedErrors.size())); CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(channel_->iqs_.size())); } + void testHandleIQ_IncorrectOtherResourceSenderForServerQuery() { + MyRequest testling(IQ::Get, JID(), payload_, router_); + router_->setJID("alice@wonderland.lit/TeaParty"); + testling.onResponse.connect(boost::bind(&RequestTest::handleResponse, this, _1, _2)); + testling.send(); + + channel_->onIQReceived(createResponse(JID("alice@wonderland.lit/RabbitHole"), "test-id")); + + CPPUNIT_ASSERT_EQUAL(0, responsesReceived_); + CPPUNIT_ASSERT_EQUAL(0, static_cast<int>(receivedErrors.size())); + CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(channel_->iqs_.size())); + } + void testHandleIQ_ServerRespondsWithDomain() { MyRequest testling(IQ::Get, JID(), payload_, router_); router_->setJID("alice@wonderland.lit/TeaParty"); testling.onResponse.connect(boost::bind(&RequestTest::handleResponse, this, _1, _2)); testling.send(); channel_->onIQReceived(createResponse(JID("wonderland.lit"),"test-id")); CPPUNIT_ASSERT_EQUAL(0, responsesReceived_); |