Backup fails with ReadError("raise ReadError("unexpected end of data")

Bug #1725829 reported by Bharat Mediratta
18
This bug affects 3 people
Affects Status Importance Assigned to Milestone
Duplicity
Confirmed
Undecided
Unassigned

Bug Description

Hey team. I've been using duplicity and duply for about a year now with few problems. I recently upgraded my Debian system (I can probably find out the exact upgrade details if you need to know) and duplicity started crashing. You can see the full trace below.

As far as I can tell, it's attempting to convert an incomplete tarfile into a GPG version. I've paused the code at that point and verified that if I do a "tar tzvf" on the input tar file, it returns an EOF error.

Note that I modified /usr/lib/python2.7/tarfile.py to add slightly more detail to the exception for debugging, but otherwise the code is unchanged.

I'm going to continue to debug independently, but if you can point me at some things to try that would help me. Happy to run whatever diagnostics will help narrow this down.

OS INFO
-------
Linux fidelity 4.9.0-1-686-pae #1 SMP Debian 4.9.6-3 (2017-01-28) i686 GNU/Linux

PACKAGE INFO
------------
ii duplicity 0.7.12-1 i386 encrypted bandwidth-efficient backup
ii duply 1.11.3-1 all easy to use frontend to the duplicity backup system

OUTPUT FROM A RUN
-----------------
# TMPDIR='/tmp' PASSPHRASE='[ELIDED]' FTP_PASSWORD='[ELIDED]' trickle -s -u 1500 -d 5120 duplicity --archive-dir '/var/cache/duply' --name duply_backups --verbosity '9' --volsize 1024 --full-if-older-than 3M --asynchronous-upload --tempdir /var/cache/duply --exclude-filelist '/etc/duply/backups/exclude' '/' 's3://[ELIDED]'
gpg: WARNING: unsafe ownership on homedir '/home/bharat/.gnupg'
Using archive dir: /var/cache/duply/duply_backups
Using backup name: duply_backups
GPG binary is gpg, version 2.1.18
Import of duplicity.backends.acdclibackend Succeeded
Import of duplicity.backends.azurebackend Succeeded
Import of duplicity.backends.b2backend Succeeded
Import of duplicity.backends.botobackend Succeeded
Import of duplicity.backends.cfbackend Succeeded
Import of duplicity.backends.copycombackend Succeeded
Import of duplicity.backends.dpbxbackend Failed: No module named dropbox
Import of duplicity.backends.gdocsbackend Succeeded
Import of duplicity.backends.giobackend Succeeded
Import of duplicity.backends.hsibackend Succeeded
Import of duplicity.backends.hubicbackend Succeeded
Import of duplicity.backends.imapbackend Succeeded
Import of duplicity.backends.lftpbackend Succeeded
Import of duplicity.backends.localbackend Succeeded
Import of duplicity.backends.mediafirebackend Succeeded
Import of duplicity.backends.megabackend Succeeded
Import of duplicity.backends.multibackend Succeeded
Import of duplicity.backends.ncftpbackend Succeeded
Import of duplicity.backends.onedrivebackend Succeeded
Import of duplicity.backends.par2backend Succeeded
Import of duplicity.backends.pydrivebackend Succeeded
Import of duplicity.backends.rsyncbackend Succeeded
Import of duplicity.backends.ssh_paramiko_backend Succeeded
Import of duplicity.backends.ssh_pexpect_backend Succeeded
Import of duplicity.backends.swiftbackend Succeeded
Import of duplicity.backends.sxbackend Succeeded
Import of duplicity.backends.tahoebackend Succeeded
Import of duplicity.backends.webdavbackend Succeeded
Reading globbing filelist /etc/duply/backups/exclude
Main action: inc
================================================================================
duplicity 0.7.12 (March 21, 2017)
Args: /usr/bin/duplicity --archive-dir /var/cache/duply --name duply_backups --verbosity 9 --volsize 1024 --full-if-older-than 3M --asynchronous-upload --tempdir /var/cache/duply --exclude-filelist /etc/duply/backups/exclude / s3://<email address hidden>/menalto.backups/fidelity
Linux fidelity 4.9.0-1-686-pae #1 SMP Debian 4.9.6-3 (2017-01-28) i686
/usr/bin/python 2.7.13 (default, Jan 19 2017, 14:48:08)
[GCC 6.3.0 20170118]
================================================================================
Using temporary directory /var/cache/duply/duplicity-A4Cxl1-tempdir
Registering (mkstemp) temporary file /var/cache/duply/duplicity-A4Cxl1-tempdir/mkstemp-tQT0KF-1
Temp has 172445667328 available, backup will use approx 2469606195.

....

Comparing usr/lib/i386-linux-gnu/samba/libcliauth.so.0 and usr/lib/i386-linux-gnu/samba/libcliauth.so.0
Selection: examining path /usr/lib/i386-linux-gnu/samba/libcluster.so.0
Selection: result: None from function: Command-line exclude glob: /dev
Selection: result: None from function: Command-line exclude glob: /tmp
Selection: result: None from function: Command-line exclude glob: /proc
Selection: result: None from function: Command-line exclude glob: /sys
Selection: result: None from function: Command-line exclude glob: /var/lib/apt-xapian-index
Selection: result: None from function: Command-line exclude glob: /var/lib/clamav/daily.cld
Selection: result: None from function: Command-line exclude glob: /var/lib/mlocate
Selection: result: None from function: Command-line exclude glob: /var/cache/apt
Selection: result: None from function: Command-line exclude glob: /home/duply
Selection: result: None from function: Command-line exclude glob: /home/virtualbox/unifi.vdi
Selection: result: None from function: Command-line exclude glob: /home/virtualbox/VMs/unifi/Snapshots
Selection: + including file
Selecting /usr/lib/i386-linux-gnu/samba/libcluster.so.0
<TarInfo 'signature/usr/lib/i386-linux-gnu/samba/libcluster.so.0' at 0xa6075dac>
Comparing usr/lib/i386-linux-gnu/samba/libcluster.so.0 and usr/lib/i386-linux-gnu/samba/libcluster.so.0
Selection: examining path /usr/lib/i386-linux-gnu/samba/libcmdline-credentials.so.0
Selection: result: None from function: Command-line exclude glob: /dev
Selection: result: None from function: Command-line exclude glob: /tmp
Selection: result: None from function: Command-line exclude glob: /proc
Selection: result: None from function: Command-line exclude glob: /sys
Selection: result: None from function: Command-line exclude glob: /var/lib/apt-xapian-index
Selection: result: None from function: Command-line exclude glob: /var/lib/clamav/daily.cld
Selection: result: None from function: Command-line exclude glob: /var/lib/mlocate
Selection: result: None from function: Command-line exclude glob: /var/cache/apt
Selection: result: None from function: Command-line exclude glob: /home/duply
Selection: result: None from function: Command-line exclude glob: /home/virtualbox/unifi.vdi
Selection: result: None from function: Command-line exclude glob: /home/virtualbox/VMs/unifi/Snapshots
Selection: + including file
Selecting /usr/lib/i386-linux-gnu/samba/libcmdline-credentials.so.0
<TarInfo 'signature/usr/lib/i386-linux-gnu/samba/libcmdline-credentials.so.0' at 0xa607598c>
Comparing usr/lib/i386-linux-gnu/samba/libcmdline-credentials.so.0 and usr/lib/i386-linux-gnu/samba/libcmdline-credentials.so.0
Selection: examining path /usr/lib/i386-linux-gnu/samba/libcom_err-samba4.so.0
Selection: result: None from function: Command-line exclude glob: /dev
Selection: result: None from function: Command-line exclude glob: /tmp
Selection: result: None from function: Command-line exclude glob: /proc
Selection: result: None from function: Command-line exclude glob: /sys
Selection: result: None from function: Command-line exclude glob: /var/lib/apt-xapian-index
Selection: result: None from function: Command-line exclude glob: /var/lib/clamav/daily.cld
Selection: result: None from function: Command-line exclude glob: /var/lib/mlocate
Selection: result: None from function: Command-line exclude glob: /var/cache/apt
Selection: result: None from function: Command-line exclude glob: /home/duply
Selection: result: None from function: Command-line exclude glob: /home/virtualbox/unifi.vdi
Selection: result: None from function: Command-line exclude glob: /home/virtualbox/VMs/unifi/Snapshots
Selection: + including file
Selecting /usr/lib/i386-linux-gnu/samba/libcom_err-samba4.so.0
<TarInfo 'snapshot/usr/lib/i386-linux-gnu/samba/libcom_err-samba4.so.0' at 0xa607570c>
Comparing usr/lib/i386-linux-gnu/samba/libcom_err-samba4.so.0 and usr/lib/i386-linux-gnu/samba/libcom_err-samba4.so.0
Selection: examining path /usr/lib/i386-linux-gnu/samba/libcom_err-samba4.so.0.25
Selection: result: None from function: Command-line exclude glob: /dev
Selection: result: None from function: Command-line exclude glob: /tmp
Selection: result: None from function: Command-line exclude glob: /proc
Selection: result: None from function: Command-line exclude glob: /sys
Selection: result: None from function: Command-line exclude glob: /var/lib/apt-xapian-index
Selection: result: None from function: Command-line exclude glob: /var/lib/clamav/daily.cld
Selection: result: None from function: Command-line exclude glob: /var/lib/mlocate
Selection: result: None from function: Command-line exclude glob: /var/cache/apt
Selection: result: None from function: Command-line exclude glob: /home/duply
Selection: result: None from function: Command-line exclude glob: /home/virtualbox/unifi.vdi
Selection: result: None from function: Command-line exclude glob: /home/virtualbox/VMs/unifi/Snapshots
Selection: + including file
Selecting /usr/lib/i386-linux-gnu/samba/libcom_err-samba4.so.0.25
<TarInfo 'signature/usr/lib/i386-linux-gnu/samba/libcom_err-samba4.so.0.25' at 0xa607540c>
Comparing usr/lib/i386-linux-gnu/samba/libcom_err-samba4.so.0.25 and usr/lib/i386-linux-gnu/samba/libcom_err-samba4.so.0.25
Selection: examining path /usr/lib/i386-linux-gnu/samba/libdbwrap.so.0
Selection: result: None from function: Command-line exclude glob: /dev
Selection: result: None from function: Command-line exclude glob: /tmp
Selection: result: None from function: Command-line exclude glob: /proc
Selection: result: None from function: Command-line exclude glob: /sys
Selection: result: None from function: Command-line exclude glob: /var/lib/apt-xapian-index
Selection: result: None from function: Command-line exclude glob: /var/lib/clamav/daily.cld
Selection: result: None from function: Command-line exclude glob: /var/lib/mlocate
Selection: result: None from function: Command-line exclude glob: /var/cache/apt
Selection: result: None from function: Command-line exclude glob: /home/duply
Selection: result: None from function: Command-line exclude glob: /home/virtualbox/unifi.vdi
Selection: result: None from function: Command-line exclude glob: /home/virtualbox/VMs/unifi/Snapshots
Selection: + including file
Selecting /usr/lib/i386-linux-gnu/samba/libdbwrap.so.0
<TarInfo 'signature/usr/lib/i386-linux-gnu/samba/libdbwrap.so.0' at 0xa6075a6c>
Comparing usr/lib/i386-linux-gnu/samba/libdbwrap.so.0 and usr/lib/i386-linux-gnu/samba/libdbwrap.so.0
Selection: examining path /usr/lib/i386-linux-gnu/samba/libdcerpc-samba.so.0
Selection: result: None from function: Command-line exclude glob: /dev
Selection: result: None from function: Command-line exclude glob: /tmp
Selection: result: None from function: Command-line exclude glob: /proc
Selection: result: None from function: Command-line exclude glob: /sys
Selection: result: None from function: Command-line exclude glob: /var/lib/apt-xapian-index
Selection: result: None from function: Command-line exclude glob: /var/lib/clamav/daily.cld
Selection: result: None from function: Command-line exclude glob: /var/lib/mlocate
Selection: result: None from function: Command-line exclude glob: /var/cache/apt
Selection: result: None from function: Command-line exclude glob: /home/duply
Selection: result: None from function: Command-line exclude glob: /home/virtualbox/unifi.vdi
Selection: result: None from function: Command-line exclude glob: /home/virtualbox/VMs/unifi/Snapshots
Selection: + including file
Selecting /usr/lib/i386-linux-gnu/samba/libdcerpc-samba.so.0
<TarInfo 'signature/usr/lib/i386-linux-gnu/samba/libdcerpc-samba.so.0' at 0xa6075b6c>
Comparing usr/lib/i386-linux-gnu/samba/libdcerpc-samba.so.0 and usr/lib/i386-linux-gnu/samba/libdcerpc-samba.so.0
Selection: examining path /usr/lib/i386-linux-gnu/samba/libdcerpc-samba4.so.0
Selection: result: None from function: Command-line exclude glob: /dev
Selection: result: None from function: Command-line exclude glob: /tmp
Selection: result: None from function: Command-line exclude glob: /proc
Selection: result: None from function: Command-line exclude glob: /sys
Selection: result: None from function: Command-line exclude glob: /var/lib/apt-xapian-index
Selection: result: None from function: Command-line exclude glob: /var/lib/clamav/daily.cld
Selection: result: None from function: Command-line exclude glob: /var/lib/mlocate
Selection: result: None from function: Command-line exclude glob: /var/cache/apt
Selection: result: None from function: Command-line exclude glob: /home/duply
Selection: result: None from function: Command-line exclude glob: /home/virtualbox/unifi.vdi
Selection: result: None from function: Command-line exclude glob: /home/virtualbox/VMs/unifi/Snapshots
Selection: + including file
Selecting /usr/lib/i386-linux-gnu/samba/libdcerpc-samba4.so.0
Releasing lockfile /var/cache/duply/duply_backups/lockfile.lock
Removing still remembered temporary file /var/cache/duply/duplicity-A4Cxl1-tempdir/mktemp-_tMnye-4
Removing still remembered temporary file /var/cache/duply/duplicity-A4Cxl1-tempdir/mkstemp-tQT0KF-1
Removing still remembered temporary file /var/cache/duply/duplicity-A4Cxl1-tempdir/mktemp-t8lgqC-3
Traceback (most recent call last):
  File "/usr/bin/duplicity", line 1553, in <module>
    with_tempdir(main)
  File "/usr/bin/duplicity", line 1547, in with_tempdir
    fn()
  File "/usr/bin/duplicity", line 1398, in main
    do_backup(action)
  File "/usr/bin/duplicity", line 1529, in do_backup
    incremental_backup(sig_chain)
  File "/usr/bin/duplicity", line 678, in incremental_backup
    globals.backend)
  File "/usr/bin/duplicity", line 439, in write_multivol
    globals.volsize)
  File "/usr/lib/python2.7/dist-packages/duplicity/gpg.py", line 360, in GPGWriteFile
    data = block_iter.next().data
  File "/usr/lib/python2.7/dist-packages/duplicity/diffdir.py", line 523, in next
    result = self.process(self.input_iter.next())
  File "/usr/lib/python2.7/dist-packages/duplicity/diffdir.py", line 195, in get_delta_iter
    for new_path, sig_path in collated:
  File "/usr/lib/python2.7/dist-packages/duplicity/diffdir.py", line 286, in collate2iters
    relem2 = riter2.next()
  File "/usr/lib/python2.7/dist-packages/duplicity/diffdir.py", line 354, in combine_path_iters
    refresh_triple_list(triple_list)
  File "/usr/lib/python2.7/dist-packages/duplicity/diffdir.py", line 341, in refresh_triple_list
    new_triple = get_triple(old_triple[1])
  File "/usr/lib/python2.7/dist-packages/duplicity/diffdir.py", line 327, in get_triple
    path = path_iter_list[iter_index].next()
  File "/usr/lib/python2.7/dist-packages/duplicity/diffdir.py", line 239, in sigtar2path_iter
    for tarinfo in tf:
  File "/usr/lib/python2.7/tarfile.py", line 2511, in next
    tarinfo = self.tarfile.next()
  File "/usr/lib/python2.7/tarfile.py", line 2352, in next
    raise ReadError("unexpected end of data in %s at offset %d" % (self.name, self.offset - 1))
ReadError: unexpected end of data in /usr/lib/python2.7/dist-packages/duplicity/arbitrary at offset 2388667391

Revision history for this message
Bharat Mediratta (bharat-menalto) wrote :

I did a little more digging. It appears that the sigtar for the full backup is corrupt:

# tar tzf /home/duply/duply_backups/duplicity-full-signatures.20171001T100005Z.sigtar.gz | wc -l
tar: Unexpected EOF in archive
tar: Error is not recoverable: exiting now
213827

So that opens up a few questions:

1. Why is it corrupt? I don't have a crash log handy, but I could try to find it
2. How do I recover? Is it safe to just delete the local files and try again?
3. How can I help improve the system to do a better job of error recovery in this case?

thanks!

Revision history for this message
Günter Rote (rote) wrote :

I have had the same problem, for about a year now. It used to work
previously. (I now had to switch from incremental backups
to full backups, because duplicity would crash on incremental backups.)

The same error messages for duplicity as described above, ending in

....
  File "/usr/lib/python2.7/dist-packages/duplicity/diffdir.py", line 239, in sigtar2path_iter
    for tarinfo in tf:
  File "/usr/lib/python2.7/tarfile.py", line 2508, in next
    tarinfo = self.tarfile.next()
  File "/usr/lib/python2.7/tarfile.py", line 2350, in next
    raise ReadError("unexpected end of data")
ReadError: unexpected end of data

The same error on trying to read the signature file
(duplicity-full-signatures.20171014T111852Z.sigtar.gz) with tar

tar: Unerwartetes Dateiende im Archiv.
tar: Error is not recoverable: exiting now

================================================
I include a Windows partition in parts of my backup,
and I probably do have lots of non-ASCII filenames.
The signatures tar-file is quite huge:
2147378916 = size in bytes

=========================
I am running Ubuntu 16.04.3 LTS xenial
as a 32-bit system!
/lib/systemd/systemd: ELF 32-bit LSB shared object, Intel 80386,

duplicity version 0.7.06

The file size is very close to 2**31 = 2147483648
Might this be the source of the problem?

Revision history for this message
Bharat Mediratta (bharat-menalto) wrote :

My file size was very close to 2**31 as well, but I have VOLSIZE=2048 so I figured that 2G was an expected number. Haven't dug in there.

I resolved this problem by deleting the locally corrupted and re-running. I believe what happened next is that it downloaded the full signatures again, and the cloud copy (I store them on S3) was fine. I'm back running again, but the questions still stand:

1. Why is it corrupt? I don't have a crash log handy, but I could try to find it
2. How do I recover? Is it safe to just delete the local files and try again?
3. How can I help improve the system to do a better job of error recovery in this case?

Answer to #2 seems to be "delete local copy"

Revision history for this message
Günter Rote (rote) wrote :

I found the following passage in dup_temp.py:

        if pr.compressed:
            gpg.GzipWriteFile(src_iter, tgt.name, size=sys.maxsize)
        elif pr.encrypted:
            gpg.GPGWriteFile(src_iter, tgt.name, globals.gpg_profile, size=sys.maxsize)

sys.maxsize = 2*31-1 on 32-bit systems.

When gpg.GzipWriteFile tries to write more bytes than the size parameter allows
it will quit and return False. (But for the signature file the return value is
not checked, in contrast to
the cases when the program writes the data itself. Those calls use the default size value.)

I guess the author meant to turn off the size check by choosing size=sys.maxsize
(instead of writing size=None and dealing properly with it.)

Here is what a supposed much simpler replacement function might look like, for one of these
functions (I haven't tested yet, and I don't understand the assert statement, which I
copied from the original).

def GzipWriteFile_without_size_constraint(block_iter, filename, gzipped=True):
    """
    Write gzipped compressed file, without size constraint

    Otherwise similar to GPGWriteFile
    """
    file_out = open(filename, "wb")
    # if gzipped wrap with GzipFile else plain file out
    if gzipped:
        outfile = gzip.GzipFile(None, "wb", 6, file_out)
    else:
        outfile = file_out
    for new_block in block_iter:
        outfile.write(new_block.data)
    assert not outfile.close() and not file_out.close()

Revision history for this message
Günter Rote (rote) wrote :

With this patch, duplicity at least wrote the full .sigtar.gz file
(2630787933 bytes), and reading it with "tar tvfz" produces no error.
I did not yet try to make an incremental updated on top of it.

(Unfortunately, block_iter does not define the .__iter__() method, so
I could not simply write "for block in block_iter".)

Revision history for this message
Bharat Mediratta (bharat-menalto) wrote :

Have you managed to make an incremental build on top of the patch? I've applied the patch locally and am testing it.

Revision history for this message
Günter Rote (rote) wrote :

Yes, I have recently made an incremental backup on top of the one built by the
patch.
The backup went through.
(I have not yet checked whether I can restore from it.)

Revision history for this message
Bharat Mediratta (bharat-menalto) wrote :

full backup with the patch failed for me, haven't diagnosed yet.

--- Start running command FULL at 14:07:58.465 ---
gpg: WARNING: unsafe ownership on homedir '/home/bharat/.gnupg'
Reading globbing filelist /etc/duply/backups/exclude
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: Mon Jan 15 16:27:05 2018
Traceback (most recent call last):
  File "/usr/bin/duplicity", line 1553, in <module>
    with_tempdir(main)
  File "/usr/bin/duplicity", line 1547, in with_tempdir
    fn()
  File "/usr/bin/duplicity", line 1398, in main
    do_backup(action)
  File "/usr/bin/duplicity", line 1517, in do_backup
    full_backup(col_stats)
  File "/usr/bin/duplicity", line 586, in full_backup
    sig_outfp.to_remote()
  File "/usr/lib/python2.7/dist-packages/duplicity/dup_temp.py", line 185, in to_remote
    gpg.GPGWriteFile(src_iter, tgt.name, globals.gpg_profile, size=None)
  File "/usr/lib/python2.7/dist-packages/duplicity/gpg.py", line 351, in GPGWriteFile
    target_size = size - 50 * 1024 # fudge factor, compensate for gpg buffering
TypeError: unsupported operand type(s) for -: 'NoneType' and 'int'

Revision history for this message
Günter Rote (rote) wrote :

One shouldn't perform calculation with "None".
How could I have overlooked this. I hope it is now fixed.

Revision history for this message
Günter Ladwig (gla-de) wrote :

Has this bug been fixed in a later duplicity version? I'm running into the same error on 0.7.11, also with a signature tar file of similar size.

Revision history for this message
Bharat Mediratta (bharat-menalto) wrote : Re: [Bug 1725829] Re: Backup fails with ReadError("raise ReadError("unexpected end of data")

I dramatically reduced the size & scope of the backup I was performing and
the issue went away (as anticipated). So I no longer have a replicable test
case. Consequently, I don't know if the underlying issue has been fixed..
sorry!

On Mon, Aug 13, 2018 at 1:01 PM Günter Ladwig <email address hidden>
wrote:

> Has this bug been fixed in a later duplicity version? I'm running into
> the same error on 0.7.11, also with a signature tar file of similar
> size.
>
> --
> You received this bug notification because you are subscribed to the bug
> report.
> https://bugs.launchpad.net/bugs/1725829
>
> Title:
> Backup fails with ReadError("raise ReadError("unexpected end of data")
>
> To manage notifications about this bug go to:
> https://bugs.launchpad.net/duplicity/+bug/1725829/+subscriptions
>

Revision history for this message
Warren Lavallee (wlavallee) wrote :

It's not fixed.

duplicity 0.7.11

Changed in duplicity:
status: New → In Progress
importance: Undecided → Medium
milestone: none → 0.8.13
Revision history for this message
Kenneth Loafman (kenneth-loafman) wrote :

Please upgrade to the current version of duplicity. This will assure that any bugs fixed since your release are available and may fix your issue.

There are multiple options both stable and daily:

* Stable tarball install - https://launchpad.net/duplicity/+download
* Daily duplicity builds - https://launchpad.net/~duplicity-team/+archive/ubuntu/daily-dev-trunk
* Stable snap builds - “sudo snap install duplicity —classic"
* Latest snap builds - “sudo snap install duplicity —classic —edge"
* Latest pip3 builds - “sudo pip3 install duplicity"

NOTE: UNinstall duplicity first if it was installed via the distribution repository. For Ubuntu that would be "sudo apt-get purge duplicity".

Changed in duplicity:
status: In Progress → Incomplete
Changed in duplicity:
importance: Medium → Undecided
milestone: 0.8.13 → none
Revision history for this message
Launchpad Janitor (janitor) wrote :

[Expired for Duplicity because there has been no activity for 60 days.]

Changed in duplicity:
status: Incomplete → Expired
Revision history for this message
James Renken (jrenken) wrote :

Reproduced in 0.8.19 and opened in new bug tracker: https://gitlab.com/duplicity/duplicity/-/issues/67

Changed in duplicity:
status: Expired → Confirmed
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.