Bug#646016: perl: undefined behaviour in ext/POSIX/t/sysconf.t wrt FIFOs
On Thu, Oct 20, 2011 at 05:38:51PM +0200, Pino Toscano wrote: while compiling perl 5.14.2 on GNU/Hurd, I ran into what it seems a undefined POSIX behaviour in ext/POSIX/t/sysconf.t. my $fd = POSIX::open($fifo, O_RDWR) or skip(could not open $fifo ($!), 3 * @path_consts_fifo); according to the POSIX open()[1] about O_RDWR, The result is undefined if this flag is applied to a FIFO. which is actually our case. Apparently Linux and *FreeBSD (and maybe also OSes) accept this behaviour, but on GNU/Hurd this causes the open() call to block undefinitely. Given there's nothing done with the FIFO if not querying {,f}pathconf() values, the proposed solution I attached is to change the opening mode to O_RDONLY | O_NONBLOCK. Thanks for the patch. I'm testing this on bleadperl now and will forward upstream prior to applying locally, using your message above in the commit log. -- Dominic Hargreaves | http://www.larted.org.uk/~dom/ PGP key 5178E2A5 from the.earth.li (keyserver,web,email) -- To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Bug#646016: perl: undefined behaviour in ext/POSIX/t/sysconf.t wrt FIFOs
Package: perl Version: 5.14.2-1 Severity: normal Tags: patch Hi, while compiling perl 5.14.2 on GNU/Hurd, I ran into what it seems a undefined POSIX behaviour in ext/POSIX/t/sysconf.t. my $fd = POSIX::open($fifo, O_RDWR) or skip(could not open $fifo ($!), 3 * @path_consts_fifo); according to the POSIX open()[1] about O_RDWR, The result is undefined if this flag is applied to a FIFO. which is actually our case. Apparently Linux and *FreeBSD (and maybe also OSes) accept this behaviour, but on GNU/Hurd this causes the open() call to block undefinitely. Given there's nothing done with the FIFO if not querying {,f}pathconf() values, the proposed solution I attached is to change the opening mode to O_RDONLY | O_NONBLOCK. [1] http://pubs.opengroup.org/onlinepubs/9699919799/functions/open.html Thanks, -- Pino --- a/ext/POSIX/t/sysconf.t +++ b/ext/POSIX/t/sysconf.t @@ -130,7 +130,7 @@ or skip(could not create fifo $fifo ($!), 2 * 3 * @path_consts_fifo); SKIP: { - my $fd = POSIX::open($fifo, O_RDWR) + my $fd = POSIX::open($fifo, O_RDONLY | O_NONBLOCK) or skip(could not open $fifo ($!), 3 * @path_consts_fifo); for my $constant (@path_consts_fifo) {