[AutoAdd] Verify torrent decode and errors cleanly if invalid

Watch folder was disabled in AutoAdd and torrent filename is unchanged
if an invalid torrent was added.

Trac: https://dev.deluge-torrent.org/ticket/3515
Closes: https://github.com/deluge-torrent/deluge/pull/381
This commit is contained in:
deaddrop9 2022-03-28 19:12:54 +11:00 committed by Calum Lind
parent 970a0ae240
commit bc6611fc0d
No known key found for this signature in database
GPG Key ID: 90597A687B836BA3
1 changed files with 6 additions and 3 deletions

View File

@ -27,7 +27,7 @@ import deluge.configmanager
from deluge._libtorrent import lt
from deluge.common import AUTH_LEVEL_ADMIN, is_magnet
from deluge.core.rpcserver import export
from deluge.error import AddTorrentError
from deluge.error import AddTorrentError, InvalidTorrentError
from deluge.event import DelugeEvent
from deluge.plugins.pluginbase import CorePluginBase
@ -158,7 +158,10 @@ class Core(CorePluginBase):
# Get the info to see if any exceptions are raised
if not magnet:
lt.torrent_info(lt.bdecode(filedump))
decoded_torrent = lt.bdecode(filedump)
if decoded_torrent is None:
raise InvalidTorrentError('Torrent file failed decoding.')
lt.torrent_info(decoded_torrent)
return filedump
@ -268,7 +271,7 @@ class Core(CorePluginBase):
try:
filedump = self.load_torrent(filepath, magnet)
except (OSError, EOFError) as ex:
except (OSError, EOFError, InvalidTorrentError) as ex:
# If torrent is invalid, keep track of it so can try again on the next pass.
# This catches torrent files that may not be fully saved to disk at load time.
log.debug('Torrent is invalid: %s', ex)