Package: tar
Version: 1.22-1
Severity: grave

tar is not longer able to read tar files with some garbage at the end
under some condition. If it is called from the shell, the resulting
SIGPIPE kills the called bzip2 process and tar swallows the error:

| close(3)                                = 0
| waitpid(18165, [{WIFSIGNALED(s) && WTERMSIG(s) == SIGPIPE}], 0) = 18165
| --- SIGCHLD (Child exited) @ 0 (0) ---
| [...]
| exit_group(0)                           = ?

In the other case I call it via a python script. The python interpreter
collects SIGPIPE by default and the setting is persistent in the child
processes. So the SIGPIPE is now collected by bzip2 and converted
into an error:

| write(1, 
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 
-1 EPIPE (Broken pipe)
| --- SIGPIPE (Broken pipe) @ 0 (0) ---
| [...]
| exit_group(1)                           = ?

| close(3)                                = 0
| waitpid(18105, [{WIFEXITED(s) && WEXITSTATUS(s) == 1}], 0) = 18105
| --- SIGCHLD (Child exited) @ 0 (0) ---
| [...]
| exit_group(2)                           = ?

| bzip2: I/O or other error, bailing out.  Possible reason follows.
| bzip2: Broken pipe
|         Input file = (stdin), output file = (stdout)
| tar: Child returned status 1
| tar: Exiting with failure status due to previous errors

It seems that tar now relies on the behaviour that SIGPIPE kills the
child and therfor needs to properly set it up.

Bastian

-- 
You're too beautiful to ignore.  Too much woman.
                -- Kirk to Yeoman Rand, "The Enemy Within", stardate unknown

Attachment: signature.asc
Description: Digital signature

Reply via email to