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,
Bram
Thread Previous
|
Thread Next