Closed p5pRT closed 15 years ago
Very simple program:
$ perl -e 'sub foo { /(?{ return })/ } for (1..8) { foo; }' Segmentation fault
The number of iterations makes a difference. For this program\, with 1..7 I get no segmentation fault. If I put C\
If you're not seeing the segmentation fault\, try using a large number of iterations like a million.
I think I've seen similar crashes using C\
Here's an interesting variant:
$ perl -le 'sub foo { print scalar (/(?{ return })/) } for (1..8) { foo; }' 81 81 81 81 81 81 81 81 Segmentation fault
Where does the 81 come from?
Another:
$ perl -le 'sub foo { print scalar (/(?{ return })/)+1 } for (1..20) { foo; }' 202 202 202 202 202 202 202
That one doesn't crash\, but continues running without printing anything.
Another:
$ perl -le 'sub foo { print 1+scalar (/(?{ return })/) } for (1..20) { foo; }' 201 202 203 204 205 206 207
That also keeps running without printing anything more.
-- Jamie
I think I've seen similar crashes using C\
\, which is actually useful for aborting regexes without backtracking\, and for making parsers where the code for actions is embedded in the regex. Unfortunately I don't have a handy test case for C\ .
Here is a little example of a 'die' crash:
my $a = qr{A}; my $c = qr{$a }; my $d = qr{B};
"abcd" =~ m{(?{ die })}x;
But the following doesn't crash:
my $a = qr{A}; my $c = qr{$a}; # \<- my $d = qr{B};
"abcd" =~ m{(?{ die })}x;
Philippe
Summary of my perl5 (revision 5 version 8 subversion 3) configuration: Platform: osname=MSWin32\, osvers=4.0\, archname=MSWin32-x86-multi-thread uname='' config_args='undef' hint=recommended\, useposix=true\, d_sigaction=undef usethreads=undef 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='cl'\, ccflags ='-nologo -Gf -W3 -MD -Zi -DNDEBUG -O1 -DWIN32 -D_CONSOLE -DNO_STRICT -DHAVE _DES_FCRYPT -DNO_HASH_SEED -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -DPERL_MSVCRT_READF IX'\, optimize='-MD -Zi -DNDEBUG -O1'\, cppflags='-DWIN32' ccversion=''\, gccversion=''\, gccosandvers='' intsize=4\, longsize=4\, ptrsize=4\, doublesize=8\, byteorder=1234 d_longlong=undef\, longlongsize=8\, d_longdbl=define\, longdblsize=10 ivtype='long'\, ivsize=4\, nvtype='double'\, nvsize=8\, Off_t='__int64'\, lseeksize=8 alignbytes=8\, prototype=define Linker and Libraries: ld='link'\, ldflags '-nologo -nodefaultlib -debug -opt:ref\,icf -libpath:"C:\Perl\lib\CORE" -ma chine:x86' libpth=C:\PROGRA~1\MICROS~3\VC98\lib libs= oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleau t32.lib netapi32.lib uuid.lib wsock32.lib mpr.lib winmm.lib version.lib odbc32.lib odbccp32.lib msvcrt.lib perllibs= oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib o leaut32.lib netapi32.lib uuid.lib wsock32.lib mpr.lib winmm.lib version.lib odbc32.lib odbccp32.lib msvcrt.lib libc=msvcrt.lib\, so=dll\, useshrplib=yes\, libperl=perl58.lib gnulibc_version='undef' Dynamic Linking: dlsrc=dl_win32.xs\, dlext=dll\, d_dlsymun=undef\, ccdlflags=' ' cccdlflags=' '\, lddlflags='-dll -nologo -nodefaultlib -debug -opt:ref\,icf -libpath:"C:\Perl \lib\CORE" -machine:x86'
Characteristics of this binary (from libperl): Compile-time options: MULTIPLICITY USE_ITHREADS USE_LARGE_FILES PERL_IMPLICIT_CONTEXT PERL_IMPLICIT_SYS Locally applied patches: ActivePerl Build 809 22218 Remove the caveat about detached threads crashing on Windows 22201 Avoid threads+win32 crash by freeing Perl interpreter slightly later 22169 Display 'out of memeory' errors using low-level I/O 22159 Upgrade to Time::Hires 1.55 22120 Make 'Configure -Dcf_by=...' work 22051 Upgrade to Time::HiRes 1.54 21540 Fix backward-compatibility issues in if.pm Built under MSWin32 Compiled at Feb 3 2004 00:28:51 @INC: c:/Perl/lib c:/Perl/site/lib .
The RT System itself - Status changed from 'new' to 'open'
I've verified that this is fixed in 5.10.0 and 5.11.0.
@obra - Status changed from 'open' to 'resolved'
Migrated from rt.perl.org#27595 (status was 'resolved')
Searchable as RT27595$