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

I was unable to get a segfault testing the exact code I posted on either 5.10.1 on CentOS or 5,16,2 on OSX. I only tested it with the strings and regex listed in the code, though.

Replies are listed 'Best First'.
Re^4: Stop runaway regex
by LanX (Saint) on May 30, 2014 at 15:44 UTC
    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)

      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)