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)

Reply via email to