FAQ

Tom Lear writes:
# New Ticket Created by Tom Lear
# Please include the string: [perl #39947]
# in the subject line of all future correspondence about this issue.
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=39947 >


This is a bug report for perl from tom@trap.mtview.ca.us,
generated with the help of perlbug 1.35 running under perl v5.8.8.
We seem to have got 3 copies of this ticket.

-----------------------------------------------------------------
[Please enter your report here]

This piece of code gives FOO file descriptor 0
True - it is supposed to as there is existing code that does
explict
close(STDIN);
open(...)

relying on open getting lowest available fileno.
preventing cat from being
able to dup2 to file descriptor 0.
Cat shouldn't be trying.
But perl child process's
open(STDIN,'<&CIN'); should

So there is a bug here.

Strace shows:
9939 close(5 <unfinished ...>
9939 <... close resumed> ) = 0
9939 close(8 <unfinished ...>
9939 <... close resumed> ) = 0

STDIN:

9939 dup(7 <unfinished ...>
9939 <... dup resumed> ) = 5
9939 ioctl(5, SNDCTL_TMR_TIMEBASE or TCGETS <unfinished ...>
9939 <... ioctl resumed> , 0xbfffea88) = -1 EINVAL (Invalid argument)
9939 _llseek(5, 0, 0xbfffeac0, SEEK_CUR) = -1 ESPIPE (Illegal seek)
9939 fstat64(5, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
9939 fcntl64(5, F_SETFD, FD_CLOEXEC) = 0

No dup2 there.

Now STDOUT

9939 dup(6) = 8
9939 ioctl(8, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbfffea88) = -1 EINVAL (Invalid argument)
9939 _llseek(8, 0, 0xbfffeac0, SEEK_CUR) = -1 ESPIPE (Illegal seek)
9939 fstat64(8, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
9939 dup2(8, 1) = 1
9939 close(8) = 0

But that is as expected.



#!/usr/bin/perl

close(STDIN);
open(FOO, '/dev/null');

pipe(PIN, COUT);
pipe(CIN, POUT);
if(!fork) {
close(PIN);
close(POUT);
open(STDIN, '<&CIN');
open(STDOUT, '>&COUT');
exec('cat');
}
close(CIN);
close(COUT);
print POUT "Piped through cat...\n";
close(POUT);
print while(<PIN>);

[Please do not change anything below this line]
-----------------------------------------------------------------
---
Flags:
category=core
severity=medium
---
Site configuration information for perl v5.8.8:

Configured by Debian Project at Sun Jun 11 16:26:10 UTC 2006.

Summary of my perl5 (revision 5 version 8 subversion 8) configuration:
Platform:
osname=linux, osvers=2.6.16.4, archname=i486-linux-gnu-thread-multi
uname='linux ninsei 2.6.16.4 #1 smp preempt tue apr 11 23:28:01 pdt
2006 i686 gnulinux '
config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN
-Dcccdlflags=-fPIC -Darchname=i486-linux-gnu -Dprefix=/usr
-Dprivlib=/usr/share/perl/5.8 -Darchlib=/usr/lib/perl/5.8
-Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5
-Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local
-Dsitelib=/usr/local/share/perl/5.8.8
-Dsitearch=/usr/local/lib/perl/5.8.8 -Dman1dir=/usr/share/man/man1
-Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1
-Dsiteman3dir=/usr/local/man/man3 -Dman1ext=1 -Dman3ext=3perl
-Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Uusesfio -Uusenm
-Duseshrplib -Dlibperl=libperl.so.5.8.8 -Dd_dosuid -des'
hint=recommended, useposix=true, d_sigaction=define
usethreads=define use5005threads=undef useithreads=define
usemultiplicity=define
useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
use64bitint=undef use64bitall=undef uselongdouble=undef
usemymalloc=n, bincompat5005=undef
Compiler:
cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS
-DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
optimize='-O2',
cppflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN
-fno-strict-aliasing -pipe -I/usr/local/include'
ccversion='', gccversion='4.1.2 20060604 (prerelease) (Debian
4.1.1-2)', gccosandvers=''
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t',
lseeksize=8
alignbytes=4, prototype=define
Linker and Libraries:
ld='cc', ldflags =' -L/usr/local/lib'
libpth=/usr/local/lib /lib /usr/lib
libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt
perllibs=-ldl -lm -lpthread -lc -lcrypt
libc=/lib/libc-2.3.6.so, so=so, useshrplib=true,
libperl=libperl.so.5.8.8
gnulibc_version='2.3.6'
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib'

Locally applied patches:


---
@INC for perl v5.8.8:
/etc/perl
/usr/local/lib/perl/5.8.8
/usr/local/share/perl/5.8.8
/usr/lib/perl5
/usr/share/perl5
/usr/lib/perl/5.8
/usr/share/perl/5.8
/usr/local/lib/site_perl
.

---
Environment for perl v5.8.8:
HOME=/home/tom
LANG=en_US
LANGUAGE=en_US:en_GB:en
LD_LIBRARY_PATH (unset)
LOGDIR (unset)

PATH=/home/tom/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/usr/bin/X11:/usr/games:.
PERL_BADLANG (unset)
SHELL=/bin/zsh

Search Discussions

Discussion Posts

Previous

Follow ups

Related Discussions

Discussion Navigation
viewthread | post
posts ‹ prev | 2 of 4 | next ›
Discussion Overview
groupperl5-porters @
categoriesperl
postedJul 25, '06 at 12:19p
activeOct 13, '10 at 12:32p
posts4
users4
websiteperl.org

People

Translate

site design / logo © 2019 Grokbase