Package: deluged Version: 2.0.3-2 Severity: important Tags: upstream patch Dear Maintainer,
after upgrading from deluged 1.3 to deluged 2.0, all older torrents had disappeared. This is the result of deluged not being able to read the /var/lib/deluged/state/torrent.state file. This could possibly be a result of using Python 3, where the Pickle implementation has changed. Fixing this requires adding an encoding argument to pickle.load() at torrentmanager.py:812. -- System Information: Debian Release: bullseye/sid APT prefers testing APT policy: (990, 'testing') Architecture: amd64 (x86_64) Kernel: Linux 5.4.0-4-amd64 (SMP w/2 CPU cores) Kernel taint flags: TAINT_OOT_MODULE, TAINT_UNSIGNED_MODULE Locale: LANG=de_DE.UTF-8, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8), LANGUAGE=de_DE.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system) LSM: AppArmor: enabled Versions of packages deluged depends on: ii adduser 3.118 ii deluge-common 2.0.3-2.1 ii lsb-base 11.1.0 ii python3 3.7.5-3 ii python3-libtorrent 1.1.13-1.1+b1 deluged recommends no packages. deluged suggests no packages. -- Configuration Files: /etc/default/deluged changed: ENABLE_DELUGED=1 /etc/init.d/deluged changed: PATH=/sbin:/usr/sbin:/bin:/usr/bin DESC="Deluge BitTorrent Daemon" NAME="deluged" DAEMON=/usr/bin/$NAME DAEMON_ARGS="-d -c /var/lib/deluged/config -l /var/log/deluged/daemon.log -L info" USER=debian-deluged MASK=0007 PIDFILE=/var/run/$NAME.pid SCRIPTNAME=/etc/init.d/$NAME [ -x "$DAEMON" ] || exit 0 ENABLE_DELUGED=1 [ -r /etc/default/$NAME ] && . /etc/default/$NAME [ -f /etc/default/rcS ] && . /etc/default/rcS . /lib/lsb/init-functions do_start() { ulimit -n 4096 if [ $ENABLE_DELUGED != 1 ]; then log_progress_msg "Not starting ${DESC} ${NAME}, disabled in /etc/default/${NAME}" else # Return # 0 if daemon has been started # 1 if daemon was already running # 2 if daemon could not be started start-stop-daemon --start --background --quiet --pidfile $PIDFILE --exec $DAEMON \ --chuid $USER --umask $MASK --test > /dev/null \ || return 1 start-stop-daemon --start --background --quiet --pidfile $PIDFILE --make-pidfile --exec $DAEMON \ --chuid $USER --umask $MASK -- $DAEMON_ARGS \ || return 2 fi } do_stop() { # Return # 0 if daemon has been stopped # 1 if daemon was already stopped # 2 if daemon could not be stopped # other if a failure occurred start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE RETVAL="$?" [ "$RETVAL" = "2" ] && return 2 rm -f $PIDFILE return "$RETVAL" } case "$1" in start) [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" do_start case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; stop) [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" do_stop case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; status) status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? ;; restart|force-reload) log_daemon_msg "Restarting $DESC" "$NAME" do_stop case "$?" in 0|1) do_start case "$?" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to start esac ;; *) # Failed to stop log_end_msg 1 ;; esac ;; *) echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 exit 3 ;; esac : -- no debconf information
Description: Specify pickle encoding as utf-8. --- The information above should follow the Patch Tagging Guidelines, please checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here are templates for supplementary fields that you might want to add: Origin: <vendor|upstream|other>, <url of original patch> Bug: <url in upstream bugtracker> Bug-Debian: https://bugs.debian.org/<bugnumber> Bug-Ubuntu: https://launchpad.net/bugs/<bugnumber> Forwarded: <no|not-needed|url proving that it has been forwarded> Reviewed-By: <name and email of someone who approved the patch> Last-Update: 2020-03-17 --- deluge-2.0.3.orig/deluge/core/torrentmanager.py +++ deluge-2.0.3/deluge/core/torrentmanager.py @@ -809,7 +809,7 @@ class TorrentManager(component.Component try: with open(filepath, 'rb') as _file: - state = pickle.load(_file) + state = pickle.load(_file, encoding='utf-8') except (IOError, EOFError, pickle.UnpicklingError) as ex: message = 'Unable to load {}: {}'.format(filepath, ex) log.error(message)