[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._libtorrent import lt
from deluge.common import AUTH_LEVEL_ADMIN, is_magnet from deluge.common import AUTH_LEVEL_ADMIN, is_magnet
from deluge.core.rpcserver import export from deluge.core.rpcserver import export
from deluge.error import AddTorrentError from deluge.error import AddTorrentError, InvalidTorrentError
from deluge.event import DelugeEvent from deluge.event import DelugeEvent
from deluge.plugins.pluginbase import CorePluginBase from deluge.plugins.pluginbase import CorePluginBase
@ -158,7 +158,10 @@ class Core(CorePluginBase):
# Get the info to see if any exceptions are raised # Get the info to see if any exceptions are raised
if not magnet: 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 return filedump
@ -268,7 +271,7 @@ class Core(CorePluginBase):
try: try:
filedump = self.load_torrent(filepath, magnet) 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. # 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. # This catches torrent files that may not be fully saved to disk at load time.
log.debug('Torrent is invalid: %s', ex) log.debug('Torrent is invalid: %s', ex)