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

chomp() fails after alarm(), sleep #7765

Closed
p5pRT opened this issue Jan 25, 2005 · 8 comments
Closed

chomp() fails after alarm(), sleep #7765

p5pRT opened this issue Jan 25, 2005 · 8 comments

Comments

@p5pRT
Copy link

p5pRT commented Jan 25, 2005

Migrated from rt.perl.org#33928 (status was 'resolved')

Searchable as RT33928$

@p5pRT
Copy link
Author

p5pRT commented Jan 25, 2005

From perlbug20050125.z.jp@xoxy.net

Created by perlbug20050125.z.jp@xoxy.net

$ perl -e '$SIG{"ALRM"} = sub { die }; eval { alarm(1); my $x = `sleep 2`; }; chomp ($_="foo\n"); die "Wrong" if /\n/;'
Wrong at -e line 1.

(Thanks to Simon Cozens for simplifying my test case to the above.)

Perl Info

Flags:
    category=core
    severity=low

Site configuration information for perl v5.8.4:

Configured by Debian Project at Sun Dec 12 09:48:10 EST 2004.

Summary of my perl5 (revision 5 version 8 subversion 4) configuration:
  Platform:
    osname=linux, osvers=2.4.27-ti1211, archname=i386-linux-thread-multi
    uname='linux kosh 2.4.27-ti1211 #1 sun sep 19 18:17:45 est 2004 i686 gnulinux '
    config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN -Dcccdlflags=-fPIC -Darchname=i386-linux -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.4 -Dsitearch=/usr/local/lib/perl/5.8.4 -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.4 -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 -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 -I/usr/local/include'
    ccversion='', gccversion='3.3.5 (Debian 1:3.3.5-3)', 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.2.so, so=so, useshrplib=true, libperl=libperl.so.5.8.4
    gnulibc_version='2.3.2'
  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.4:
    /etc/perl
    /usr/local/lib/perl/5.8.4
    /usr/local/share/perl/5.8.4
    /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.4:
    HOME=/home/joshp
    LANG (unset)
    LANGUAGE (unset)
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=/home/joshp/bin:/bin:/usr/local/imatix/bin:/command:/usr/local/pgsql/bin:/usr/lib/firebird2/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/usr/games:/usr/sbin
    PERL_BADLANG (unset)
    SHELL=/bin/bash

@p5pRT
Copy link
Author

p5pRT commented Jan 25, 2005

From @nwc10

On Tue, Jan 25, 2005 at 08​:01​:05PM -0000, perlbug20050125. z. jp @​ xoxy. net wrote​:

# New Ticket Created by perlbug20050125.z.jp@​xoxy.net
# Please include the string​: [perl #33928]
# in the subject line of all future correspondence about this issue.
# <URL​: https://rt-archive.perl.org/perl5/Ticket/Display.html?id=33928 >

This is a bug report for perl from perlbug20050125.z.jp@​xoxy.net,
generated with the help of perlbug 1.35 running under perl v5.8.4.

-----------------------------------------------------------------
[Please enter your report here]
$ perl -e '$SIG{"ALRM"} = sub { die }; eval { alarm(1); my $x = `sleep 2`; }; chomp ($_="foo\n"); die "Wrong" if /\n/;'
Wrong at -e line 1.

Most curious. It seems to be a bug introduced between 5.8.0 and 5.8.1.
I can't think of any immediate cause, or place to start looking for this.

Nicholas Clark

@p5pRT
Copy link
Author

p5pRT commented Jan 25, 2005

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

@p5pRT
Copy link
Author

p5pRT commented Jan 26, 2005

From @iabyn

On Tue, Jan 25, 2005 at 11​:02​:16PM +0000, Nicholas Clark wrote​:

$ perl -e '$SIG{"ALRM"} = sub { die }; eval { alarm(1); my $x = `sleep 2`; }; chomp ($_="foo\n"); die "Wrong" if /\n/;'
Wrong at -e line 1.

Most curious. It seems to be a bug introduced between 5.8.0 and 5.8.1.
I can't think of any immediate cause, or place to start looking for this.

pp_backtick temporarily alters PL_rs, but saves the old value in a C local
var rather than on the savestack. A subsequent die and eval thus fails to
restore the old value during the stack unwind.

But it's too late at night for me to fix right now; I'm off up the wooden
hill to befordshire...

--
To collect all the latest movies, simply place an unprotected ftp server
on the Internet, and wait for the disk to fill....

@p5pRT
Copy link
Author

p5pRT commented Jan 26, 2005

From @nwc10

On Wed, Jan 26, 2005 at 12​:15​:08AM +0000, Dave Mitchell wrote​:

On Tue, Jan 25, 2005 at 11​:02​:16PM +0000, Nicholas Clark wrote​:

$ perl -e '$SIG{"ALRM"} = sub { die }; eval { alarm(1); my $x = `sleep 2`; }; chomp ($_="foo\n"); die "Wrong" if /\n/;'
Wrong at -e line 1.

Most curious. It seems to be a bug introduced between 5.8.0 and 5.8.1.
I can't think of any immediate cause, or place to start looking for this.

pp_backtick temporarily alters PL_rs, but saves the old value in a C local
var rather than on the savestack. A subsequent die and eval thus fails to
restore the old value during the stack unwind.

Ah yes.

I wonder how many other places in the perl code have a similar class of bug.

Specifically here, I wonder how to safely write a portable regression test.
Maybe it's safe already as the output of the backticks is ignored, so if there
is no sleep command to run it would still pass.

Nicholas Clark

@p5pRT
Copy link
Author

p5pRT commented Jan 26, 2005

From @schwern

On Wed, Jan 26, 2005 at 11​:46​:28AM +0000, Nicholas Clark wrote​:

Specifically here, I wonder how to safely write a portable regression test.
Maybe it's safe already as the output of the backticks is ignored, so if there
is no sleep command to run it would still pass.

Replace 'sleep 2' with 'perl -e "sleep 2"'?

@p5pRT
Copy link
Author

p5pRT commented Jan 29, 2005

From @iabyn

On Wed, Jan 26, 2005 at 12​:15​:08AM +0000, Dave Mitchell wrote​:

On Tue, Jan 25, 2005 at 11​:02​:16PM +0000, Nicholas Clark wrote​:

$ perl -e '$SIG{"ALRM"} = sub { die }; eval { alarm(1); my $x = `sleep 2`; }; chomp ($_="foo\n"); die "Wrong" if /\n/;'
Wrong at -e line 1.

Most curious. It seems to be a bug introduced between 5.8.0 and 5.8.1.
I can't think of any immediate cause, or place to start looking for this.

pp_backtick temporarily alters PL_rs, but saves the old value in a C local
var rather than on the savestack. A subsequent die and eval thus fails to
restore the old value during the stack unwind.

now fixed by change 23898.

--
Hofstadter's Law​:
It always takes longer than you expect, even when you take into account
Hofstadter's Law.

@p5pRT
Copy link
Author

p5pRT commented Jan 29, 2005

@iabyn - Status changed from 'open' to 'resolved'

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

1 participant