Citeren Bram <p5p@perl.wizbit.be>: >> Avar mailed p5p in >> 51dd1af80807190107h30b8626ct6d4d0a825abe4b3b@mail.gmail.com >> http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2008-07/msg00382.html >> >> perl 5.10 and blead will do various combinations of running of of >> memory, hanging or segfaulting when running on a program using >> XML::Parser::Lite, attached is a stripped down version of X::P::L >> which demonstrates the problem: >> >> >> Dave notes: >> >> possibly a 5.10.0 regression >> > > > Some more debugging (and trimming perl5db.pl to 19 lines) revealed the > problem. > > In perl5db.pl in sub sub: > > http://perl5.git.perl.org/perl.git/blob/85bdf03b25729816eedfea55a7f2c32c4bb80fba:/lib/perl5db.pl > 3650 if ($sub =~ /^threads::new$/ && $ENV{PERL5DB_THREADED}) { > 3651 print "creating new thread\n"; > 3652 } > > > The trimmed test case from some earlier debugging: > > *c = sub {}; > '' =~ m/(?{ c() })/; > > > What happens: > - c() is called inside a regex. > - DB::sub is called > - DB::sub starts a new regex > > The end result is that a new regex is being executed inside a regex and > the regex engine can't handle that. > > > This also means it is reproduciable without the debugger: > > #!/usr/bin/perl -l > > print $]; > *c = sub { "foo" =~ m/bar/ }; > sub parse_re { > $_[0] =~ m{(?{ c() })}; > } > parse_re(); > __END__ > 5.011000 > Segmentation fault > > > (Of course since it is a memory corruption it may not be reproducible > on every system). > > > I'll submit a patch and a test case later today. Patch attached. Best regards, BramThread Previous | Thread Next