diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-10-19 14:53:30 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-10-19 14:53:30 +0000 |
| commit | 2040d64fe59f7a4865caa9d58d3f9fb27d0837f2 (patch) | |
| tree | 09cd0d60977c0d8bc5a307d4f4fc96d25e60e287 /test/BtRequestMessageTest.cc | |
| parent | ff20aefa516f5d6a06bf9f8742974ec274d3491f (diff) | |
2008-10-19 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Fixed the bug that aria2 aborts when a request larger than 16KiB
is
recieved.
In this fix, if a request larger than 16KiB length is received,
aria2
disconnects the peer.
* src/BtConstants.h
* src/PeerMessageUtil.cc
* src/PeerMessageUtil.h
* test/BtRequestMessageTest.cc
Diffstat (limited to 'test/BtRequestMessageTest.cc')
| -rw-r--r-- | test/BtRequestMessageTest.cc | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/test/BtRequestMessageTest.cc b/test/BtRequestMessageTest.cc index 99d4d85c..c6d990cb 100644 --- a/test/BtRequestMessageTest.cc +++ b/test/BtRequestMessageTest.cc @@ -1,4 +1,9 @@ #include "BtRequestMessage.h" + +#include <cstring> + +#include <cppunit/extensions/HelperMacros.h> + #include "PeerMessageUtil.h" #include "MockBtContext.h" #include "MockBtMessage.h" @@ -16,8 +21,7 @@ #include "ExtensionMessageFactory.h" #include "FileEntry.h" #include "BtHandshakeMessage.h" -#include <cstring> -#include <cppunit/extensions/HelperMacros.h> +#include "BtRequestMessageValidator.h" namespace aria2 { @@ -36,6 +40,8 @@ class BtRequestMessageTest:public CppUnit::TestFixture { CPPUNIT_TEST(testHandleAbortRequestEvent_alreadyInvalidated); CPPUNIT_TEST(testHandleAbortRequestEvent_sendingInProgress); CPPUNIT_TEST(testToString); + CPPUNIT_TEST(testValidate); + CPPUNIT_TEST(testValidate_lengthTooLong); CPPUNIT_TEST_SUITE_END(); private: @@ -52,6 +58,8 @@ public: void testHandleAbortRequestEvent_alreadyInvalidated(); void testHandleAbortRequestEvent_sendingInProgress(); void testToString(); + void testValidate(); + void testValidate_lengthTooLong(); class MockPieceStorage2 : public MockPieceStorage { public: @@ -283,4 +291,29 @@ void BtRequestMessageTest::testToString() { msg->toString()); } +void BtRequestMessageTest::testValidate() { + BtRequestMessage msg(0, 0, 16*1024); + msg.setBtMessageValidator + (SharedHandle<BtMessageValidator> + (new BtRequestMessageValidator(&msg, 1024, 256*1024))); + std::deque<std::string> errors; + + msg.validate(errors); +} + +void BtRequestMessageTest::testValidate_lengthTooLong() { + BtRequestMessage msg(0, 0, 16*1024+1); + msg.setBtMessageValidator + (SharedHandle<BtMessageValidator> + (new BtRequestMessageValidator(&msg, 1024, 256*1024))); + std::deque<std::string> errors; + try { + msg.validate(errors); + CPPUNIT_FAIL("exception must be thrown."); + } catch(DlAbortEx& e) { + CPPUNIT_ASSERT_EQUAL(std::string("Length too long: 16385 > 16KB"), + std::string(e.what())); + } +} + } // namespace aria2 |
