Perl / perl5

🐪 The Perl programming language
https://dev.perl.org/perl5/
Other
1.9k stars 542 forks source link

regular expression segfault #5165

Closed p5pRT closed 17 years ago

p5pRT commented 22 years ago

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

Searchable as RT8718$

p5pRT commented 22 years ago

From gergo@www.kapu.hu

Created by gergo@kapu.hu

using regular expression on more than 500k couses a segfault with perl.

I tryed with 5.005_03 5.6 5.6.1\, and the behavion is the same. The regular expression was complicated. Why am i sure that the size coused it?

The code was similar to this (the regexp was complicated)​: $regularexpression = '(([\w\s]+)+([ \d]+ : [\w ]+\n)+)+'; if ($data =~ /$regularexpression/smog){   do_something; }

with the same data (smaller than 500k (not exactly)) perl recognised my data and done "do_something"\, but after putting to the end of data more data (example from the beginning of the date (with the same structure))\, perl segfaults.

Perl Info ``` Flags: category=core severity=medium Site configuration information for perl v5.6.1: Configured by bod at Fri Jan 11 04:14:18 EST 2002. Summary of my perl5 (revision 5.0 version 6 subversion 1) configuration: Platform: osname=linux, osvers=2.4.13, archname=i386-linux uname='linux duende 2.4.13 #1 wed oct 31 19:18:07 est 2001 i686 unknown ' config_args='-Dccflags=-DDEBIAN -Dcccdlflags=-fPIC -Darchname=i386-linux -Dprefix=/usr -Dprivlib=/usr/share/perl/5.6.1 -Darchlib=/usr/lib/perl/5.6.1 -Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 -Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl/5.6.1 -Dsitearch=/usr/local/lib/perl/5.6.1 -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 -Dman1ext=1 -Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Uusesfio -Duseshrplib -Dlibperl=libperl.so.5.6.1 -Dd_dosuid -des' hint=recommended, useposix=true, d_sigaction=define usethreads=undef use5005threads=undef useithreads=undef usemultiplicity=undef useperlio=undef d_sfio=undef uselargefiles=define usesocks=undef use64bitint=undef use64bitall=undef uselongdouble=undef Compiler: cc='cc', ccflags ='-DDEBIAN -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64', optimize='-O2', cppflags='-DDEBIAN -fno-strict-aliasing -I/usr/local/include' ccversion='', gccversion='2.95.4 (Debian prerelease)', 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, usemymalloc=n, prototype=define Linker and Libraries: ld='cc', ldflags =' -L/usr/local/lib' libpth=/usr/local/lib /lib /usr/lib libs=-lgdbm -ldb -ldl -lm -lc -lcrypt perllibs=-ldl -lm -lc -lcrypt libc=/lib/libc-2.2.4.so, so=so, useshrplib=true, libperl=libperl.so.5.6.1 Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-rdynamic' cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib' Locally applied patches: @INC for perl v5.6.1: /usr/local/lib/perl/5.6.1 /usr/local/share/perl/5.6.1 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.6.1 /usr/share/perl/5.6.1 /usr/local/lib/site_perl . Environment for perl v5.6.1: HOME=/home/gergo LANG=C LANGUAGE (unset) LD_LIBRARY_PATH (unset) LOGDIR (unset) PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/home/gergo/bin PERL_BADLANG (unset) SHELL=/bin/bash ```
p5pRT commented 17 years ago

From @smpeters

On Wed Feb 27 20​:30​:38 2002\, gergo@​www.kapu.hu wrote​:

This is a bug report for perl from gergo@​kapu.hu\, generated with the help of perlbug 1.33 running under perl v5.6.1.

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

using regular expression on more than 500k couses a segfault with perl.

I tryed with 5.005_03 5.6 5.6.1\, and the behavion is the same. The regular expression was complicated. Why am i sure that the size coused it?

The code was similar to this (the regexp was complicated)​: $regularexpression = '(([\w\s]+)+([ \d]+ : [\w ]+\n)+)+'; if ($data =~ /$regularexpression/smog){ do_something; }

with the same data (smaller than 500k (not exactly)) perl recognised my data and done "do_something"\, but after putting to the end of data more data (example from the beginning of the date (with the same structure))\, perl segfaults.

Without any sample for what is contained in $data above\, it is impossible to replicate this bug. My guess\, however\, based on your description\, this bug is likely to have been resolved in the development version of Perl.

p5pRT commented 17 years ago

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