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

STDIN <> and PerlIO doc #11788

Open
p5pRT opened this issue Dec 8, 2011 · 5 comments
Open

STDIN <> and PerlIO doc #11788

p5pRT opened this issue Dec 8, 2011 · 5 comments

Comments

@p5pRT
Copy link

p5pRT commented Dec 8, 2011

Migrated from rt.perl.org#105658 (status was 'open')

Searchable as RT105658$

@p5pRT
Copy link
Author

p5pRT commented Dec 8, 2011

From @Greenfactory

Created by @Greenfactory

#!/usr/bin/perl
use strict;
use warnings;

my $data = "aaa\nbbb\nccc\n";

# Ok
close STDIN or die $!;
open( STDIN, '<', \$data ) or die $!;
@​ARGV = ();
while (<STDIN>)
{
  print "[[$ARGV]]***$_";
}

# Bug
close STDIN or die $!;
open( STDIN, '<', \$data ) or die $!;
@​ARGV = ();
while (<>)
{
  # print PerlIO.pod
  print "[[$ARGV]]***$_";
}

Perl Info

Flags:
    category=core
    severity=low

Site configuration information for perl 5.10.1:

Configured by Debian Project at Fri Apr 22 19:20:15 UTC 2011.

Summary of my perl5 (revision 5 version 10 subversion 1) configuration:

  Platform:
    osname=linux, osvers=2.6.24-28-server,
archname=x86_64-linux-gnu-thread-multi
    uname='linux allspice 2.6.24-28-server #1 smp wed aug 18 21:17:51 utc
2010 x86_64 gnulinux '
    config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN
-Dcccdlflags=-fPIC -Darchname=x86_64-linux-gnu -Dprefix=/usr
-Dprivlib=/usr/share/perl/5.10 -Darchlib=/usr/lib/perl/5.10
-Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5
-Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local
-Dsitelib=/usr/local/share/perl/5.10.1
-Dsitearch=/usr/local/lib/perl/5.10.1 -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 -Ud_ualarm -Uusesfio -Uusenm
-DDEBUGGING=-g -Doptimize=-O2 -Duseshrplib -Dlibperl=libperl.so.5.10.1
-Dd_dosuid -des'
    hint=recommended, useposix=true, d_sigaction=define
    useithreads=define, usemultiplicity=define
    useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
    use64bitint=define, use64bitall=define, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN
-fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
    optimize='-O2 -g',
    cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing
-pipe -fstack-protector -I/usr/local/include'
    ccversion='', gccversion='4.4.5', gccosandvers=''
    intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
    ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t',
lseeksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='cc', ldflags =' -fstack-protector -L/usr/local/lib'
    libpth=/usr/local/lib /lib /usr/lib /lib64 /usr/lib64
    libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt
    perllibs=-ldl -lm -lpthread -lc -lcrypt
    libc=/lib/libc-2.12.1.so, so=so, useshrplib=true,
libperl=libperl.so.5.10.1
    gnulibc_version='2.12.1'
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
    cccdlflags='-fPIC', lddlflags='-shared -O2 -g -L/usr/local/lib
-fstack-protector'

Locally applied patches:
    DEBPKG:debian/arm_thread_stress_timeout -
http://bugs.debian.org/501970Raise the timeout of
ext/threads/shared/t/stress.t to accommodate slower
build hosts
    DEBPKG:debian/cpan_config_path - Set location of CPAN::Config to
/etc/perl as /usr may not be writable.
    DEBPKG:debian/cpan_definstalldirs - Provide a sensible INSTALLDIRS
default for modules installed from CPAN.
    DEBPKG:debian/db_file_ver - http://bugs.debian.org/340047 Remove overly
restrictive DB_File version check.
    DEBPKG:debian/doc_info - Replace generic man(1) instructions with
Debian-specific information.
    DEBPKG:debian/enc2xs_inc - http://bugs.debian.org/290336 Tweak enc2xs
to follow symlinks and ignore missing @INC directories.
    DEBPKG:debian/errno_ver - http://bugs.debian.org/343351 Remove Errno
version check due to upgrade problems with long-running processes.
    DEBPKG:debian/extutils_hacks - Various debian-specific ExtUtils changes
    DEBPKG:debian/fakeroot - Postpone LD_LIBRARY_PATH evaluation to the
binary targets.
    DEBPKG:debian/instmodsh_doc - Debian policy doesn't install .packlist
files for core or vendor.
    DEBPKG:debian/ld_run_path - Remove standard libs from LD_RUN_PATH as
per Debian policy.
    DEBPKG:debian/libnet_config_path - Set location of libnet.cfg to
/etc/perl/Net as /usr may not be writable.
    DEBPKG:debian/m68k_thread_stress -
http://bugs.debian.org/495826Disable some threads tests on m68k for
now due to missing TLS.
    DEBPKG:debian/mod_paths - Tweak @INC ordering for Debian
    DEBPKG:debian/module_build_man_extensions -
http://bugs.debian.org/479460 Adjust Module::Build manual page extensions
for the Debian Perl policy
    DEBPKG:debian/perl_synopsis - http://bugs.debian.org/278323 Rearrange
perl.pod
    DEBPKG:debian/prune_libs - http://bugs.debian.org/128355 Prune the list
of libraries wanted to what we actually need.
    DEBPKG:debian/use_gdbm - Explicitly link against -lgdbm_compat in
ODBM_File/NDBM_File.
    DEBPKG:fixes/assorted_docs - http://bugs.debian.org/443733 [384f06a]
Math::BigInt::CalcEmu documentation grammar fix
    DEBPKG:fixes/net_smtp_docs - http://bugs.debian.org/100195
[rt.cpan.org#36038] Document the Net::SMTP 'Port' option
    DEBPKG:fixes/processPL - http://bugs.debian.org/357264
[rt.cpan.org#17224] Always use PERLRUNINST when building perl modules.
    DEBPKG:debian/perlivp - http://bugs.debian.org/510895 Make perlivp skip
include directories in /usr/local
    DEBPKG:fixes/pod2man-index-backslash -
http://bugs.debian.org/521256Escape backslashes in .IX entries
    DEBPKG:debian/disable-zlib-bundling - Disable zlib bundling in
Compress::Raw::Zlib
    DEBPKG:fixes/kfreebsd_cppsymbols -
http://bugs.debian.org/533098[3b910a0] Add gcc predefined macros to
$Config{cppsymbols} on GNU/kFreeBSD.
    DEBPKG:debian/cpanplus_definstalldirs -
http://bugs.debian.org/533707Configure CPANPLUS to use the site
directories by default.
    DEBPKG:debian/cpanplus_config_path - Save local versions of
CPANPLUS::Config::System into /etc/perl.
    DEBPKG:fixes/kfreebsd-filecopy-pipes -
http://bugs.debian.org/537555[16f708c] Fix File::Copy::copy with pipes
on GNU/kFreeBSD
    DEBPKG:fixes/anon-tmpfile-dir - http://bugs.debian.org/528544 [perl
#66452] Honor TMPDIR when open()ing an anonymous temporary file
    DEBPKG:fixes/abstract-sockets - http://bugs.debian.org/329291 [89904c0]
Add support for Abstract namespace sockets.
    DEBPKG:fixes/hurd_cppsymbols - http://bugs.debian.org/544307 [eeb92b7]
Add gcc predefined macros to $Config{cppsymbols} on GNU/Hurd.
    DEBPKG:fixes/autodie-flock - http://bugs.debian.org/543731 Allow for
flock returning EAGAIN instead of EWOULDBLOCK on linux/parisc
    DEBPKG:fixes/archive-tar-instance-error - http://bugs.debian.org/539355[
rt.cpan.org #48879] Separate Archive::Tar instance error strings from each
other
    DEBPKG:fixes/positive-gpos - http://bugs.debian.org/545234 [perl
#69056] [c584a96] Fix \\G crash on first match
    DEBPKG:debian/devel-ppport-ia64-optim -
http://bugs.debian.org/548943Work around an ICE on ia64
    DEBPKG:fixes/trie-logic-match - http://bugs.debian.org/552291 [perl
#69973] [0abd0d7] Fix a DoS in Unicode processing [CVE-2009-3626]
    DEBPKG:fixes/hppa-thread-eagain - http://bugs.debian.org/554218 make
the threads-shared test suite more robust, fixing failures on hppa
    DEBPKG:fixes/crash-on-undefined-destroy -
http://bugs.debian.org/564074[perl #71952] [1f15e67] Fix a NULL
pointer dereference when looking for a
DESTROY method
    DEBPKG:fixes/tainted-errno - http://bugs.debian.org/574129 [perl
#61976] [be1cf43] fix an errno stringification bug in taint mode
    DEBPKG:patchlevel - http://bugs.debian.org/567489 List packaged patches
for 5.10.1-12 in patchlevel.h


@INC for perl 5.10.1:
    /etc/perl
    /usr/local/lib/perl/5.10.1
    /usr/local/share/perl/5.10.1
    /usr/lib/perl5
    /usr/share/perl5
    /usr/lib/perl/5.10
    /usr/share/perl/5.10
    /usr/local/lib/site_perl
    .


Environment for perl 5.10.1:
    HOME=/home/green
    LANG=ru_RU.utf8
    LANGUAGE (unset)
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)

PATH=/home/green/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
    PERL_BADLANG (unset)
    SHELL=/bin/bash

@p5pRT
Copy link
Author

p5pRT commented Dec 8, 2011

From @cpansprout

On Thu Dec 08 03​:25​:08 2011, evdokimov.denis@​gmail.com wrote​:

#!/usr/bin/perl
use strict;
use warnings;

my $data = "aaa\nbbb\nccc\n";

# Ok
close STDIN or die $!;
open( STDIN, '<', \$data ) or die $!;
@​ARGV = ();
while (<STDIN>)
{
print "[[$ARGV]]***$_";
}

# Bug
close STDIN or die $!;
open( STDIN, '<', \$data ) or die $!;
@​ARGV = ();
while (<>)
{
# print PerlIO.pod
print "[[$ARGV]]***$_";
}

By closing STDIN you are closing fd 0, which is reused by the next file
opened.

I seem to remember this came up about three years ago and the consensus
was that it is not a bug. I’m not sure.

If my memory serves me correctly, searching for ‘you passed sub
protections’ and ‘This gotta change’ in the archives will bring it up.

--

Father Chrysostomos

@p5pRT
Copy link
Author

p5pRT commented Dec 8, 2011

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

@p5pRT
Copy link
Author

p5pRT commented Dec 9, 2011

From @moonlibs

The problem is not in closing fd 0

Let's look at the following sample​:

# dup.pl
open my $fh, '<&=',0 or die;
print fileno STDIN, "​:", scalar readline STDIN;
close STDIN;
print fileno $fh, "​:", scalar readline $fh;

########
bash $ { echo 1; sleep 1; echo 2; } | perl dup.pl
0​:1
0​:2

(During this I've investigated, that if we do echo -ne "1\n2\n" | perl
dup.pl, then <$fh> receive nothing. I think that's because of buffered
read. Don't know should be this considered a bug)

Then we add the same

open my $fh, '<&=',0 or die;

to the beginning of the example and check the fileno at the end

0 == fileno $fh or die "fileno fh nonzero";

then we will see, that fileno 0 was kept, it still assigned to stdin (this
could be checked additionally), but the behavior of this program still the
same​: we got an output of PerlIO.pm

On Thu, Dec 8, 2011 at 9​:18 PM, Father Chrysostomos via RT <
perlbug-followup@​perl.org> wrote​:

On Thu Dec 08 03​:25​:08 2011, evdokimov.denis@​gmail.com wrote​:

#!/usr/bin/perl
use strict;
use warnings;

my $data = "aaa\nbbb\nccc\n";

# Ok
close STDIN or die $!;
open( STDIN, '<', \$data ) or die $!;
@​ARGV = ();
while (<STDIN>)
{
print "[[$ARGV]]***$_";
}

# Bug
close STDIN or die $!;
open( STDIN, '<', \$data ) or die $!;
@​ARGV = ();
while (<>)
{
# print PerlIO.pod
print "[[$ARGV]]***$_";
}

By closing STDIN you are closing fd 0, which is reused by the next file
opened.

I seem to remember this came up about three years ago and the consensus
was that it is not a bug. I’m not sure.

If my memory serves me correctly, searching for ‘you passed sub
protections’ and ‘This gotta change’ in the archives will bring it up.

--

Father Chrysostomos

--
Best wishes,
Vladimir V. Perepelitsa aka Mons Anderson
<inthrax@​gmail.com>, <mons@​cpan.org>
http​://github.com/Mons

@p5pRT
Copy link
Author

p5pRT commented Dec 9, 2011

From mons@rambler-co.ru

The problem is not in closing fd 0

Let's look at the following sample​:

# dup.pl
open my $fh, '<&=',0 or die;
print fileno STDIN, "​:", scalar readline STDIN;
close STDIN;
print fileno $fh, "​:", scalar readline $fh;

########
bash $ { echo 1; sleep 1; echo 2; } | perl dup.pl
0​:1
0​:2

(During this I've investigated, that if we do echo -ne "1\n2\n" | perl dup.pl, then <$fh> receive nothing. I think that's because of buffered read. Don't know should be this considered a bug)

Then we add the same

open my $fh, '<&=',0 or die;

to the beginning of the example and check the fileno at the end

0 == fileno $fh or die "fileno fh nonzero";

then we will see, that fileno 0 was kept, it still assigned to stdin (this could be checked additionally), but the behavior of this program still the same​: we got an output of PerlIO.pm

On 08.12.2011, at 21​:18, Father Chrysostomos via RT wrote​:

On Thu Dec 08 03​:25​:08 2011, evdokimov.denis@​gmail.com wrote​:

#!/usr/bin/perl
use strict;
use warnings;

my $data = "aaa\nbbb\nccc\n";

# Ok
close STDIN or die $!;
open( STDIN, '<', \$data ) or die $!;
@​ARGV = ();
while (<STDIN>)
{
print "[[$ARGV]]***$_";
}

# Bug
close STDIN or die $!;
open( STDIN, '<', \$data ) or die $!;
@​ARGV = ();
while (<>)
{
# print PerlIO.pod
print "[[$ARGV]]***$_";
}

By closing STDIN you are closing fd 0, which is reused by the next file
opened.

I seem to remember this came up about three years ago and the consensus
was that it is not a bug. I’m not sure.

If my memory serves me correctly, searching for ‘you passed sub
protections’ and ‘This gotta change’ in the archives will bring it up.

--

Father Chrysostomos

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants