mirror of https://github.com/aria2/aria2
Fix assertion failure when dir option of paused HTTP/FTP download is changed
When the directory is changed via aria2.changeOption RPC method, we directly change first FileEntry's path using FileEntry::setPath(). If there is no PREF_OUT option is given, basically file name is unknown, so we just set empty string and let the next run determine the correct file name and new directory is applied there. But previous code does not reset length property of FileEntry, so the unexpected code path is taken when unpaused and its path expects path is not empty string. This commit fixes this issue by setting length to 0 using FileEntry::setLength().pull/235/merge
parent
b1a8df4cd9
commit
83f4bced07
|
@ -1478,9 +1478,18 @@ void changeOption
|
|||
&& !dctx->hasAttribute(CTX_ATTR_BT)
|
||||
#endif // ENABLE_BITTORRENT
|
||||
) {
|
||||
dctx->getFirstFileEntry()->setPath
|
||||
(grOption->blank(PREF_OUT) ? A2STR::NIL :
|
||||
util::applyDir(grOption->get(PREF_DIR), grOption->get(PREF_OUT)));
|
||||
|
||||
auto& fileEntry = dctx->getFirstFileEntry();
|
||||
|
||||
if(grOption->blank(PREF_OUT)) {
|
||||
// We need to reset length to 0, so that we pretend that file
|
||||
// name is unknown and it should be determined at next run.
|
||||
fileEntry->setLength(0);
|
||||
fileEntry->setPath(A2STR::NIL);
|
||||
} else {
|
||||
fileEntry->setPath
|
||||
(util::applyDir(grOption->get(PREF_DIR), grOption->get(PREF_OUT)));
|
||||
}
|
||||
}
|
||||
}
|
||||
#ifdef ENABLE_BITTORRENT
|
||||
|
|
Loading…
Reference in New Issue