diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-08-03 11:16:15 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-08-03 11:16:15 +0000 |
| commit | e5730839cca71dc11e0e8a1f89b458af8edc729a (patch) | |
| tree | b007ab47df2772afb49a110edddbf58e0d5b5494 | |
| parent | 374083fb085fd48a969c92346ad95d931fd171ac (diff) | |
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
| -rw-r--r-- | ChangeLog | 7 | ||||
| -rw-r--r-- | src/FtpNegotiationCommand.cc | 6 | ||||
| -rw-r--r-- | src/HttpResponseCommand.cc | 12 |
3 files changed, 23 insertions, 2 deletions
@@ -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 diff --git a/src/FtpNegotiationCommand.cc b/src/FtpNegotiationCommand.cc index 52b2e155..80371fd3 100644 --- a/src/FtpNegotiationCommand.cc +++ b/src/FtpNegotiationCommand.cc @@ -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; diff --git a/src/HttpResponseCommand.cc b/src/HttpResponseCommand.cc index ddf3acdb..929d7992 100644 --- a/src/HttpResponseCommand.cc +++ b/src/HttpResponseCommand.cc @@ -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(); |
