2008-08-03 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>

Fixed the bug that causes segmentaion fault when resuming 
download
	using metalink without size tag. Reproducible only using HTTP 
URI.
	* src/HttpResponseCommand.cc
	* src/FtpNegotiationCommand.cc
pull/1/head
Tatsuhiro Tsujikawa 2008-08-03 11:16:15 +00:00
parent 374083fb08
commit e5730839cc
3 changed files with 23 additions and 2 deletions

View File

@ -1,3 +1,10 @@
2008-08-03 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Fixed the bug that causes segmentaion fault when resuming download
using metalink without size tag. Reproducible only using HTTP URI.
* src/HttpResponseCommand.cc
* src/FtpNegotiationCommand.cc
2008-08-01 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* Release 0.15.1

View File

@ -88,7 +88,11 @@ bool FtpNegotiationCommand::executeInternal() {
command->setStartupIdleTime(e->option->getAsInt(PREF_STARTUP_IDLE_TIME));
command->setLowestDownloadSpeedLimit(e->option->getAsInt(PREF_LOWEST_SPEED_LIMIT));
if(!_requestGroup->isSingleHostMultiConnectionEnabled()) {
_requestGroup->removeURIWhoseHostnameIs(_requestGroup->searchServerHost(cuid)->getHostname());
SharedHandle<ServerHost> sv =
_requestGroup->searchServerHost(req->getHost());
if(!sv.isNull()) {
_requestGroup->removeURIWhoseHostnameIs(sv->getHostname());
}
}
e->commands.push_back(command);
return true;

View File

@ -95,7 +95,17 @@ bool HttpResponseCommand::executeInternal()
}
if(!_requestGroup->isSingleHostMultiConnectionEnabled()) {
_requestGroup->removeURIWhoseHostnameIs(_requestGroup->searchServerHost(cuid)->getHostname());
// Query by hostname. Searching by CUID may returns NULL.
// In case when resuming download, ServerHost is registered with CUID A.
// Then if requested range is not equal to saved one,
// StreamFileAllocationEntry is created with _nextCommand NULL and
// _currentRequest not NULL. This results creating new command CUID, say
// B and same URI. So searching ServerHost by CUID B fails.
SharedHandle<ServerHost> sv =
_requestGroup->searchServerHost(req->getHost());
if(!sv.isNull()) {
_requestGroup->removeURIWhoseHostnameIs(sv->getHostname());
}
}
if(_requestGroup->getPieceStorage().isNull()) {
uint64_t totalLength = httpResponse->getEntityLength();