2010-10-31 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

Return empty range if byte-range-resp-spec or instance-length is
	"*" in Content-Range header to prevent aria2 from emitting error
	failing to convert "*" to a integer.
	* src/HttpHeader.cc
	* test/HttpHeaderTest.cc
pull/1/head
Tatsuhiro Tsujikawa 2010-10-31 07:56:01 +00:00
parent 2b458da480
commit 35cc4ed1e7
3 changed files with 36 additions and 0 deletions

View File

@ -1,3 +1,11 @@
2010-10-31 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Return empty range if byte-range-resp-spec or instance-length is
"*" in Content-Range header to prevent aria2 from emitting error
failing to convert "*" to a integer.
* src/HttpHeader.cc
* test/HttpHeaderTest.cc
2010-10-31 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Made #include guard consistent for c++ header files.

View File

@ -180,6 +180,14 @@ RangeHandle HttpHeader::getRange() const
std::pair<std::string, std::string> byteRangeSpecPair;
util::divide(byteRangeSpecPair, byteRangeSpec, '/');
if(util::strip(byteRangeSpecPair.first) == "*" ||
util::strip(byteRangeSpecPair.second) == "*") {
// If byte-range-resp-spec or instance-length is "*", we returns
// empty Range. The former is usually sent with 416 (Request range
// not satisfiable) status.
return SharedHandle<Range>(new Range());
}
std::pair<std::string, std::string> byteRangeRespSpecPair;
util::divide(byteRangeRespSpecPair, byteRangeSpecPair.first, '-');

View File

@ -45,6 +45,26 @@ void HttpHeaderTest::testGetRange()
CPPUNIT_ASSERT_EQUAL((off_t)9223372036854775801LL, range->getEndByte());
CPPUNIT_ASSERT_EQUAL((uint64_t)9223372036854775807ULL, range->getEntityLength());
}
{
HttpHeader httpHeader;
httpHeader.put("Content-Range", "bytes */1024");
SharedHandle<Range> range = httpHeader.getRange();
CPPUNIT_ASSERT_EQUAL((off_t)0, range->getStartByte());
CPPUNIT_ASSERT_EQUAL((off_t)0, range->getEndByte());
CPPUNIT_ASSERT_EQUAL((uint64_t)0, range->getEntityLength());
}
{
HttpHeader httpHeader;
httpHeader.put("Content-Range", "bytes 0-9/*");
SharedHandle<Range> range = httpHeader.getRange();
CPPUNIT_ASSERT_EQUAL((off_t)0, range->getStartByte());
CPPUNIT_ASSERT_EQUAL((off_t)0, range->getEndByte());
CPPUNIT_ASSERT_EQUAL((uint64_t)0, range->getEntityLength());
}
}
void HttpHeaderTest::testGet()