Bug#646016: perl: undefined behaviour in ext/POSIX/t/sysconf.t wrt FIFOs

2011-11-01 Thread Dominic Hargreaves
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

2011-10-20 Thread Pino Toscano
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) {