Revert "fix [perl #76546] regex engine slowdown bug"
authorYves Orton <demerphq@gmail.com>
Mon, 28 May 2012 08:58:06 +0000 (10:58 +0200)
committerYves Orton <demerphq@gmail.com>
Mon, 28 May 2012 09:00:42 +0000 (11:00 +0200)
This reverts commit dee29c6b5bec1d6e7fccc971e31113a5d7cee844.

    $ perl5.16.0 -e 'warn "t/bin/good.pl syntax OK\n" =~ /syntax OK\s+\z/si'
    1 at -e line 1.
    $ bleadperl -e 'warn "t/bin/good.pl syntax OK\n" =~ /syntax OK\s+\z/si'
    Warning: something's wrong at -e line 1.

Will fix properly later.

regexec.c

index 58ea4a0..8650654 100644 (file)
--- a/regexec.c
+++ b/regexec.c
@@ -561,7 +561,6 @@ Perl_re_intuit_start(pTHX_ REGEXP * const rx, SV *sv, char *strpos,
     I32 ml_anch;
     register char *other_last = NULL;  /* other substr checked before this */
     char *check_at = NULL;             /* check substr found at this pos */
-    char *checked_upto = NULL;          /* how far into the string we have already checked using find_byclass*/
     const I32 multiline = prog->extflags & RXf_PMf_MULTILINE;
     RXi_GET_DECL(prog,progi);
 #ifdef DEBUGGING
@@ -1091,20 +1090,15 @@ Perl_re_intuit_start(pTHX_ REGEXP * const rx, SV *sv, char *strpos,
         else 
             endpos= strend;
                    
-        if (!checked_upto)
-           checked_upto = s;
-        DEBUG_EXECUTE_r(PerlIO_printf(Perl_debug_log, "start_shift: %"IVdf" check_at: %"IVdf" s: %"IVdf" endpos: %"IVdf" checked_upto: %"IVdf"\n",
-                                      (IV)start_shift, (IV)(check_at - strbeg), (IV)(s - strbeg), (IV)(endpos - strbeg), (IV)(checked_upto- strbeg)));
-
+        DEBUG_EXECUTE_r(PerlIO_printf(Perl_debug_log, "start_shift: %"IVdf" check_at: %"IVdf" s: %"IVdf" endpos: %"IVdf"\n",
+                                     (IV)start_shift, (IV)(check_at - strbeg), (IV)(s - strbeg), (IV)(endpos - strbeg)));
+       
        t = s;
-        s = find_byclass(prog, progi->regstclass, checked_upto, endpos, NULL);
-       if (s) {
-           checked_upto = s;
-       } else {
+        s = find_byclass(prog, progi->regstclass, s, endpos, NULL);
+       if (!s) {
 #ifdef DEBUGGING
            const char *what = NULL;
 #endif
-           checked_upto = endpos;
            if (endpos == strend) {
                DEBUG_EXECUTE_r( PerlIO_printf(Perl_debug_log,
                                "Could not match STCLASS...\n") );