[Debian-science-sagemath] Bug#844789: iS: issue related to compressed manual.six
Bill Allombert
ballombe at debian.org
Thu Nov 24 10:26:34 UTC 2016
On Thu, Nov 24, 2016 at 10:34:28AM +0100, Bill Allombert wrote:
> On Thu, Nov 24, 2016 at 04:55:28AM +0000, Jerome BENOIT wrote:
> > -----BEGIN PGP SIGNED MESSAGE-----
> > Hash: SHA512
> >
> > Hello Again,
> >
> > On 24/11/16 02:52, Jerome BENOIT wrote:
> > >
> > >
> > > On 23/11/16 09:59, Bill Allombert wrote:
> > >> Can you generate a full strace dump ?
> > >
> > > Yes. Unfortunately I have not yet succeeded to decipher them.
> > >
> > > There is a `Broken pipe' somewhere.
> > > The piping seems to be related to the uncompresion of a `manual.siz.gx'.
> >
> > There are a myriad of processes: the messages around the `Broken pipe' are:
> >
> > execve("/bin/gunzip", ["gunzip"], [/* 90 vars */]) = 0
> > [...]
> > rt_sigaction(SIGINT, NULL, {SIG_DFL, [], 0}, 8) = 0
> > rt_sigaction(SIGHUP, NULL, {SIG_IGN, [], 0}, 8) = 0
> > rt_sigaction(SIGPIPE, NULL, {SIG_IGN, [], 0}, 8) = 0
> > rt_sigaction(SIGTERM, NULL, {SIG_DFL, [], 0}, 8) = 0
> > rt_sigaction(SIGXCPU, NULL, {SIG_DFL, [], 0}, 8) = 0
> > rt_sigaction(SIGXFSZ, NULL, {SIG_IGN, [], 0}, 8) = 0
> > rt_sigaction(SIGINT, {0x4035c0, [INT TERM XCPU], SA_RESTORER, 0x7eff302e1040}, NULL, 8) = 0
> > rt_sigaction(SIGTERM, {0x4035c0, [INT TERM XCPU], SA_RESTORER, 0x7eff302e1040}, NULL, 8) = 0
> > rt_sigaction(SIGXCPU, {0x4035c0, [INT TERM XCPU], SA_RESTORER, 0x7eff302e1040}, NULL, 8) = 0
> > ioctl(0, TCGETS, 0x7ffef9ddf1c0) = -1 ENOTTY (Inappropriate ioctl for device)
> > fstat(0, {st_mode=S_IFREG|0644, st_size=171476, ...}) = 0
> > read(0, "\37\213\10\0\0\0\0\0\2\3\244\\\331\222\324H\226}\317\257\220\345\274T\233\1\346\3732c\363\240"..., 32768) = 32768
> > brk(NULL) = 0x669000
> > brk(0x68a000) = 0x68a000
> > write(1, "#SIXFORMAT GapDocGAP\nHELPBOOKIN"..., 32768) = 32768
> > write(1, ".4-1\", [ 20, 4, 1 ], 98, 246, \"l"..., 32768) = 32768
> > write(1, " \"35.3-5\", [ 35, 3, 5 ], 310, 46"..., 32768) = 16384
> > - --- SIGPIPE {si_signo=SIGPIPE, si_code=SI_USER, si_pid=9643, si_uid=1000} ---
> > write(1, "033[101X\", \"41.10-2\", \n [ 4"..., 16384) = -1 EPIPE (Broken pipe)
> > - --- SIGPIPE {si_signo=SIGPIPE, si_code=SI_USER, si_pid=9643, si_uid=1000} ---
> > write(2, "\ngzip: ", 7) = 7
> > write(2, "stdout: Broken pipe\n", 20) = 20
> > rt_sigprocmask(SIG_BLOCK, [INT TERM XCPU], [], 8) = 0
> > rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
> > lseek(0, 0, SEEK_CUR) = 32768
> > close(0) = 0
> > close(1) = 0
> > close(2) = 0
> > exit_group(1) = ?
> > +++ exited with 1 +++
> >
> > [[/bin/gunzip is in fact a shell script that wraps `gzip -d' ]]
> >
> > It looks like that it happens what is described in the following link:
> >
> > https://blog.nelhage.com/2010/02/a-very-subtle-bug/
> >
> > that is to say, python/sage manipulates SIGPIPE in such a way that any gzip piping
> > becomes hazardous.
>
> Can you confirm that 'CloseStream(stream);' is the call that trigger the
> SIGPIPE ? In which case this can be worked around.
Please find a patch that make sure the stream is empty before calling
CloseStream(stream).
However, it woud be much safer to fix the issue from the python side
following the suggestion in the blogpost above, because there might be
other place in GAP where gzip can receive a SIGPIPE.
Cheers,
--
Bill. <ballombe at debian.org>
Imagine a large red swirl here.
-------------- next part --------------
Index: gap-4r8p6/lib/helpbase.gi
===================================================================
--- gap-4r8p6.orig/lib/helpbase.gi
+++ gap-4r8p6/lib/helpbase.gi
@@ -660,7 +660,9 @@ InstallGlobalFunction(HELP_BOOK_INFO, fu
NormalizeWhitespace(handler);
else
handler := "default";
- RewindStream(stream);
+ while ReadLine(stream) <> fail do od;
+ CloseStream(stream);
+ stream := InputTextFile(six);
fi;
# give up if handler functions are not (yet) loaded
if not IsBound(HELP_BOOK_HANDLER.(handler)) then
More information about the Debian-science-sagemath
mailing list