seek(0) on /dev/stdin crashes

Bug #1652953 reported by Dan Faerch
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Duplicity
Fix Released
Medium
Unassigned

Bug Description

    $ duplicity --version
    duplicity 0.7.06

    $ python --version
    Python 3.5.2 :: Anaconda 4.1.1 (64-bit)

I receive this crash on ubuntu 16.04 (after dist-upgrading from 14.04):

Reading globbing filelist /dev/stdin
Using temporary directory /tmp/duplicity-_9R_Ux-tempdir
Traceback (most recent call last):
  File "/usr/bin/duplicity", line 1532, in <module>
    with_tempdir(main)
  File "/usr/bin/duplicity", line 1526, in with_tempdir
    fn()
  File "/usr/bin/duplicity", line 1364, in main
    action = commandline.ProcessCommandLine(sys.argv[1:])
  File "/usr/lib/python2.7/dist-packages/duplicity/commandline.py", line 1130, in ProcessCommandLine
    set_selection()
  File "/usr/lib/python2.7/dist-packages/duplicity/commandline.py", line 968, in set_selection
    sel.ParseArgs(select_opts, select_files)
  File "/usr/lib/python2.7/dist-packages/duplicity/selection.py", line 263, in ParseArgs
    for sf in self.filelist_globbing_get_sfs(filelists[filelists_index], 0, arg):
  File "/usr/lib/python2.7/dist-packages/duplicity/selection.py", line 370, in filelist_globbing_get_sfs
    filelist_fp.seek(0)
IOError: [Errno 29] Illegal seek

I think it is because i do something like:

    $ find /home/ -size +800M | duplicity --exclude-filelist=/dev/stdin

But.. On linux, you cannot seek on stdin, if stdin arrives from a pipe. You could, if it had been a file-redirection, like so:

    $ program_that_seeks_stdin < file.txt

but not:

    $ cat file.txt | program_that_seeks_stdin

In my case, i solved it by wrapping the seek in a "try: except: pass" block, but that might not be a solution if the file-descriptor has already been read and the position actually needs to be reset.

Revision history for this message
Dan Faerch (u-launchpad-dan-hacker-dk) wrote :

I ran into to this again, after upgrading to the newest version, to get a fix for another bug.

This time i remembered to take a diff :). Patch-file attached.

Changed in duplicity:
importance: Undecided → Medium
milestone: none → 0.8.19
status: New → Fix Committed
Changed in duplicity:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers