fix #132017 - OPFAIL insert needs to set flags to 0
authorYves Orton <demerphq@gmail.com>
Sun, 10 Sep 2017 08:59:05 +0000 (10:59 +0200)
committerYves Orton <demerphq@gmail.com>
Sun, 10 Sep 2017 08:59:05 +0000 (10:59 +0200)
why reginsert doesnt do this stuff I dont know.

regcomp.c
t/re/pat.t

index 5a9e56b..8bb2bbb 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -11763,6 +11763,7 @@ S_regpiece(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
             if (max < min) {    /* If can't match, warn and optimize to fail
                                    unconditionally */
                 reginsert(pRExC_state, OPFAIL, orig_emit, depth+1);
+                orig_emit->flags = 0;
                 if (PASS2) {
                     ckWARNreg(RExC_parse, "Quantifier {n,m} with n > m can't match");
                     NEXT_OFF(orig_emit)= regarglen[OPFAIL] + NODE_STEP_REGNODE;
@@ -19440,8 +19441,11 @@ Perl_regprop(pTHX_ const regexp *prog, SV *sv, const regnode *o, const regmatch_
 
     /* add on the verb argument if there is one */
     if ( ( k == VERB || OP(o) == ACCEPT || OP(o) == OPFAIL ) && o->flags) {
-        Perl_sv_catpvf(aTHX_ sv, ":%" SVf,
+        if ( ARG(o) )
+            Perl_sv_catpvf(aTHX_ sv, ":%" SVf,
                        SVfARG((MUTABLE_SV(progi->data->data[ ARG( o ) ]))));
+        else
+            sv_catpvs(sv, ":NULL");
     }
 #else
     PERL_UNUSED_CONTEXT;
index cf97ecd..ec02bc6 100644 (file)
@@ -23,7 +23,7 @@ BEGIN {
     skip_all('no re module') unless defined &DynaLoader::boot_DynaLoader;
     skip_all_without_unicode_tables();
 
-plan tests => 843;  # Update this when adding/deleting tests.
+plan tests => 844;  # Update this when adding/deleting tests.
 
 run_tests() unless caller;
 
@@ -1931,6 +1931,9 @@ EOP
         pos($text) = 3;
         ok(scalar($text !~ m{(~*=[a-z]=)}g), "RT #131575");
     }
+    {
+        fresh_perl_is('"AA" =~ m/AA{1,0}/','',{},"handle OPFAIL insert properly");
+    }
 
 } # End of sub run_tests