It is then further wrapped in a nested eval block with an alarm set to avoid the exponetial time issue.
I was going to say that won't work because the signal won't be processed until after the match or substitution operator is done when using safe signals. Turns out it does.
$ date; perl -e'"aaaaaaaaaaaaaaaaaaaaaa" =~ /a?a?a?a?a?a?a?a?a?a?a?a?a
+?a?a?a?a?a?a?a?a?a?[b]/;'; date
Mon Mar 17 16:44:46 PDT 2008
Mon Mar 17 16:44:54 PDT 2008
$ date; perl -e'alarm(1); "aaaaaaaaaaaaaaaaaaaaaa" =~ /a?a?a?a?a?a?a?a
+?a?a?a?a?a?a?a?a?a?a?a?a?a?a?[b]/;'; date
Mon Mar 17 16:45:02 PDT 2008
Alarm clock
Mon Mar 17 16:45:03 PDT 2008
Make sure to test this with your Perl. Use any equal number of "a"s and "a?"s as long as Perl takes more than 1 sec to execute the match. (You can Ctrl-C if it takes too long.)
I have now wrapped the regexp in a block with "no re 'eval'" at start.
Just to be clear, no re 'eval'; is the default so it's not needed, but it sure is a good practice to include it here.
|