Duplicity hangs after errors (lp:#1405502)

[Original report](https://bugs.launchpad.net/bugs/1405502) created by **E.B. (emailbuilder88)**
```
Duplicity has started hanging after errors on two separate machines. Both
machines are:

Hand-compiled duplicity 0.6.25 on Ubuntu 12.04

I don't know enough if the errors themselves are related to duplicity
hanging or not, so I am including brief -v9 output from both machines. Note
the 2nd machine might be choking on an old duplicity manifest file that was
saved off while recovering from a hard disk corruption, but I'm not certain
if that matters or if it is accurate. 1st machine didn't have any disk
corruption problems.

End of both outputs includes the bit generated when I pressed control-C

#########
Machine 1
#########
Selecting /home/johnm/Maildir/dovecot.index.log.2
Releasing lockfile <lockfile.LinkFileLock instance at 0x3057d88>
Removing still remembered temporary file
/tmp/duplicity-c8o1G4-tempdir/mktemp-KV1uB3-47
Removing still remembered temporary file
/tmp/duplicity-c8o1G4-tempdir/mkstemp-uPMJ5D-1
Traceback (most recent call last):
  File "/usr/local/bin/duplicity", line 1509, in <module>
    with_tempdir(main)
  File "/usr/local/bin/duplicity", line 1503, in with_tempdir
    fn()
  File "/usr/local/bin/duplicity", line 1352, in main
    do_backup(action)
  File "/usr/local/bin/duplicity", line 1485, in do_backup
    incremental_backup(sig_chain)
  File "/usr/local/bin/duplicity", line 633, in incremental_backup
    globals.backend)
  File "/usr/local/bin/duplicity", line 399, in write_multivol
    globals.gpg_profile, globals.volsize)
  File "/usr/local/lib/python2.7/dist-packages/duplicity/gpg.py", line 331,
in GPGWriteFile
    data = block_iter.next().data
  File "/usr/local/lib/python2.7/dist-packages/duplicity/diffdir.py", line
518, in next
    result = self.process(self.input_iter.next())
  File "/usr/local/lib/python2.7/dist-packages/duplicity/diffdir.py", line
190, in get_delta_iter
    for new_path, sig_path in collated:
  File "/usr/local/lib/python2.7/dist-packages/duplicity/diffdir.py", line
281, in collate2iters
    relem2 = riter2.next()
  File "/usr/local/lib/python2.7/dist-packages/duplicity/diffdir.py", line
350, in combine_path_iters
    refresh_triple_list(triple_list)
  File "/usr/local/lib/python2.7/dist-packages/duplicity/diffdir.py", line
336, in refresh_triple_list
    new_triple = get_triple(old_triple[1])
  File "/usr/local/lib/python2.7/dist-packages/duplicity/diffdir.py", line
322, in get_triple
    path = path_iter_list[iter_index].next()
  File "/usr/local/lib/python2.7/dist-packages/duplicity/diffdir.py", line
234, in sigtar2path_iter
    for tarinfo in tf:
  File "/usr/local/lib/python2.7/dist-packages/duplicity/tarfile.py", line
2470, in next
    tarinfo = self.tarfile.next()
  File "/usr/local/lib/python2.7/dist-packages/duplicity/tarfile.py", line
2319, in next
    self.fileobj.seek(self.offset)
  File "/usr/lib/python2.7/gzip.py", line 429, in seek
    self.read(1024)
  File "/usr/lib/python2.7/gzip.py", line 256, in read
    self._read(readsize)
  File "/usr/lib/python2.7/gzip.py", line 320, in _read
    self._read_eof()
  File "/usr/lib/python2.7/gzip.py", line 342, in _read_eof
    hex(self.crc)))
IOError: CRC check failed 0x43872847 != 0x7d505e15L

^C

close failed in file object destructor:
IOError: [Errno 32] Broken pipe
Exception KeyboardInterrupt in <module 'threading' from
'/usr/lib/python2.7/threading.pyc'> ignored



#########
Machine 2
#########
note the error seems to happen on an old duplicity file
that I moved away for safe keeping while restoring from
a corrupted disk.  maybe this is the cause of the problem?

Selecting /var/old-
corrupted/root/.cache/duplicity/a5af988f0861715f4b14466a0c03b4ed/duplicity-
full.20141112T033613Z.manifest
Releasing lockfile <lockfile.LinkFileLock instance at 0x1fdcbd8>
Removing still remembered temporary file /tmp/duplicity-6G4eQj-
tempdir/mkstemp-IaPa4Q-1
Removing still remembered temporary file /tmp/duplicity-6G4eQj-
tempdir/mktemp-JzVNTP-3
Traceback (most recent call last):
  File "/usr/local/bin/duplicity", line 1509, in <module>
    with_tempdir(main)
  File "/usr/local/bin/duplicity", line 1503, in with_tempdir
    fn()
  File "/usr/local/bin/duplicity", line 1352, in main
    do_backup(action)
  File "/usr/local/bin/duplicity", line 1485, in do_backup
    incremental_backup(sig_chain)
  File "/usr/local/bin/duplicity", line 633, in incremental_backup
    globals.backend)
  File "/usr/local/bin/duplicity", line 399, in write_multivol
    globals.gpg_profile, globals.volsize)
  File "/usr/local/lib/python2.7/dist-packages/duplicity/gpg.py", line 331,
in GPGWriteFile
    data = block_iter.next().data
  File "/usr/local/lib/python2.7/dist-packages/duplicity/diffdir.py", line
518, in next
    result = self.process(self.input_iter.next())
  File "/usr/local/lib/python2.7/dist-packages/duplicity/diffdir.py", line
190, in get_delta_iter
    for new_path, sig_path in collated:
  File "/usr/local/lib/python2.7/dist-packages/duplicity/diffdir.py", line
281, in collate2iters
    relem2 = riter2.next()
  File "/usr/local/lib/python2.7/dist-packages/duplicity/diffdir.py", line
350, in combine_path_iters
    refresh_triple_list(triple_list)
  File "/usr/local/lib/python2.7/dist-packages/duplicity/diffdir.py", line
336, in refresh_triple_list
    new_triple = get_triple(old_triple[1])
  File "/usr/local/lib/python2.7/dist-packages/duplicity/diffdir.py", line
322, in get_triple
    path = path_iter_list[iter_index].next()
  File "/usr/local/lib/python2.7/dist-packages/duplicity/diffdir.py", line
234, in sigtar2path_iter
    for tarinfo in tf:
  File "/usr/local/lib/python2.7/dist-packages/duplicity/tarfile.py", line
2470, in next
    tarinfo = self.tarfile.next()
  File "/usr/local/lib/python2.7/dist-packages/duplicity/tarfile.py", line
2319, in next
    self.fileobj.seek(self.offset)
  File "/usr/lib/python2.7/gzip.py", line 429, in seek
    self.read(1024)
  File "/usr/lib/python2.7/gzip.py", line 256, in read
    self._read(readsize)
  File "/usr/lib/python2.7/gzip.py", line 307, in _read
    uncompress = self.decompress.decompress(buf)
error: Error -3 while decompressing: invalid stored block lengths

Removing still remembered temporary file
/root/.cache/duplicity/a5af988f0861715f4b14466a0c03b4ed/duplicity-N8H4EE-
tempdir/mktemp-rDiL3N-1
Removing still remembered temporary file
/root/.cache/duplicity/a5af988f0861715f4b14466a0c03b4ed/duplicity-nA91wx-
tempdir/mktemp-S2Tpqn-1

^C

close failed in file object destructor:
IOError: [Errno 32] Broken pipe
Exception KeyboardInterrupt in <module 'threading' from
'/usr/lib/python2.7/threading.pyc'> ignored
```

Story points: 6.0