in reply to Re^3: Stop runaway regex
in thread Stop runaway regex

I hope it's fixed for newer versions, here what I tried for reproduction:

Just taking the code from alarm and embedding (dummy) code into a long running regex

Generally I try to avoid alarm...

use strict; use warnings; my $start; my $diff; my $timeout; sub tst { $timeout=shift; my $str = "a"x10000; $str .= "b"; eval { local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required alarm $timeout; $str =~ /^ (( a* (?{1}) # dummy code )*)* $/x; alarm 0; }; if ($@) { die unless $@ eq "alarm\n"; # propagate unexpected errors die "timed out after $timeout sec :". time(); } else { print "normal"; } } tst($_) for 2;

output

Complex regular subexpression recursion limit (32766) exceeded at /hom +e/lanx/B/PL/PM/timeout_regex.pl line 18. Compilation segmentation fault at Fri May 30 17:41:48

Cheers Rolf

( addicted to the Perl Programming Language)

Replies are listed 'Best First'.
Re^5: Stop runaway regex
by mr_mischief (Monsignor) on May 30, 2014 at 15:53 UTC

    I also get a core dump on 5.10.1 (CentOS) with that code but not on 5.16.2 (OSX) FWIW.

    $ perl baz Complex regular subexpression recursion limit (32766) exceeded at baz +line 18. timed out after 2 sec :1401464941 at baz line 25.
    This is perl 5, version 16, subversion 2 (v5.16.2) built for darwin-th +read-multi-2level (with 3 registered patches, see perl -V for more detail)