Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Should use only file descriptors > $^F for arbitrary file handles. #8542

Closed
p5pRT opened this issue Jul 25, 2006 · 14 comments
Closed

Should use only file descriptors > $^F for arbitrary file handles. #8542

p5pRT opened this issue Jul 25, 2006 · 14 comments

Comments

@p5pRT
Copy link
Collaborator

@p5pRT p5pRT commented Jul 25, 2006

Migrated from rt.perl.org#39954 (status was 'rejected')

Searchable as RT39954$

@p5pRT

This comment has been minimized.

Copy link
Collaborator Author

@p5pRT p5pRT commented Jul 25, 2006

From tom@trap.mtview.ca.us

Created by tom@trap.mtview.ca.us

This piece of code gives FOO file descriptor 0 preventing cat from being
able to dup2 to file descriptor 0.
#!/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>);

Perl Info

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


@p5pRT

This comment has been minimized.

Copy link
Collaborator Author

@p5pRT p5pRT commented Jul 25, 2006

From tom@trap.mtview.ca.us

Created by tom@trap.mtview.ca.us

This piece of code gives FOO file descriptor 0 preventing cat from being
able to dup2 to file descriptor 0.
#!/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>);

Perl Info

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

@p5pRT

This comment has been minimized.

Copy link
Collaborator Author

@p5pRT p5pRT commented Jul 25, 2006

From tom@trap.mtview.ca.us

Created by tom@trap.mtview.ca.us

This piece of code gives FOO file descriptor 0 preventing cat from being
able to dup2 to file descriptor 0.
#!/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>);

Perl Info

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

@p5pRT

This comment has been minimized.

Copy link
Collaborator Author

@p5pRT p5pRT commented Jul 25, 2006

From @rgarcia

On 25/07/06, via RT Tom Lear <perlbug-followup@​perl.org> wrote​:

This piece of code gives FOO file descriptor 0 preventing cat from being
able to dup2 to file descriptor 0.

I think that's intended behaviour. The usual way to discard STDIN is
to reopen it to /dev/null, not to close it (in perl as in C.)

#!/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>);

@p5pRT

This comment has been minimized.

Copy link
Collaborator Author

@p5pRT p5pRT commented Jul 25, 2006

The RT System itself - Status changed from 'new' to 'open'

@p5pRT

This comment has been minimized.

Copy link
Collaborator Author

@p5pRT p5pRT commented Jul 26, 2006

From nick@ing-simmons.net

Tom Lear <perl5-porters@​perl.org> 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

@p5pRT

This comment has been minimized.

Copy link
Collaborator Author

@p5pRT p5pRT commented Jul 26, 2006

The RT System itself - Status changed from 'new' to 'open'

@p5pRT

This comment has been minimized.

Copy link
Collaborator Author

@p5pRT p5pRT commented Jul 26, 2006

@rgs - Status changed from 'new' to 'rejected'

@p5pRT p5pRT closed this Jul 26, 2006
@p5pRT

This comment has been minimized.

Copy link
Collaborator Author

@p5pRT p5pRT commented Sep 26, 2010

From @cpansprout

On Tue Jul 25 23​:10​:56 2006, ni-s wrote​:

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.

In that case, can I mark this as rejected?

@p5pRT

This comment has been minimized.

Copy link
Collaborator Author

@p5pRT p5pRT commented Sep 26, 2010

From [Unknown Contact. See original ticket]

On Tue Jul 25 23​:10​:56 2006, ni-s wrote​:

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.

In that case, can I mark this as rejected?

@p5pRT

This comment has been minimized.

Copy link
Collaborator Author

@p5pRT p5pRT commented Sep 26, 2010

From @ikegami

On Sun Sep 26 14​:36​:06 2010, sprout wrote​:

On Tue Jul 25 23​:10​:56 2006, ni-s wrote​:

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.

In that case, can I mark this as rejected?

Yes. fd0 shouldn't be closed. The only reason one would close it would
be to replace it. That's often done using the above code.

@p5pRT

This comment has been minimized.

Copy link
Collaborator Author

@p5pRT p5pRT commented Sep 26, 2010

@ikegami - Status changed from 'open' to 'rejected'

@p5pRT

This comment has been minimized.

Copy link
Collaborator Author

@p5pRT p5pRT commented Sep 26, 2010

From @ikegami

To assign CIN to fd0,

open(STDIN, '<&=0');
open(STDIN, '<&CIN');

or

POSIX​::dup2(fileno(CIN), 0);

@p5pRT

This comment has been minimized.

Copy link
Collaborator Author

@p5pRT p5pRT commented Oct 13, 2010

From tom@trap.mtview.ca.us

On 09/26/2010 03​:18 PM, Eric Brine via RT wrote​:

On Sun Sep 26 14​:36​:06 2010, sprout wrote​:

On Tue Jul 25 23​:10​:56 2006, ni-s wrote​:

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.

In that case, can I mark this as rejected?

Yes. fd0 shouldn't be closed. The only reason one would close it would
be to replace it. That's often done using the above code.

That has nothing to do with it... the documentation said $^F is one
less than the lowest file descriptor perl will automatically assign, and
that doesn't work.
  - Tom

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
1 participant
You can’t perform that action at this time.