Revert "Don’t call save_re_context"
authorDavid Mitchell <davem@iabyn.com>
Thu, 19 Mar 2015 20:35:57 +0000 (20:35 +0000)
committerDavid Mitchell <davem@iabyn.com>
Mon, 30 Mar 2015 11:05:23 +0000 (12:05 +0100)
This reverts commit d28a9254e445aee7212523d9a7ff62ae0a743fec.

Turns out we need save_re_context() after all

mg.c
regcomp.c
sv.c
utf8.c
util.c

diff --git a/mg.c b/mg.c
index b03510b..064a1ae 100644 (file)
--- a/mg.c
+++ b/mg.c
@@ -1802,6 +1802,7 @@ Perl_magic_methcall(pTHX_ SV *sv, const MAGIC *mg, SV *meth, U32 flags,
     if (flags & G_WRITING_TO_STDERR) {
        SAVETMPS;
 
+       save_re_context();
        SAVESPTR(PL_stderrgv);
        PL_stderrgv = NULL;
     }
index b572995..40336bf 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -6180,6 +6180,7 @@ S_compile_runtime_code(pTHX_ RExC_state_t * const pRExC_state,
 
        ENTER;
        SAVETMPS;
+       save_re_context();
        PUSHSTACKi(PERLSI_REQUIRE);
         /* G_RE_REPARSING causes the toker to collapse \\ into \ when
          * parsing qr''; normally only q'' does this. It also alters
diff --git a/sv.c b/sv.c
index 4a818f2..467dc24 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -15286,6 +15286,7 @@ Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
            nsv = sv_newmortal();
            SvSetSV_nosteal(nsv, sv);
        }
+       save_re_context();
        PUSHMARK(sp);
        EXTEND(SP, 3);
        PUSHs(encoding);
@@ -15356,6 +15357,7 @@ Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
        dSP;
        ENTER;
        SAVETMPS;
+       save_re_context();
        PUSHMARK(sp);
        EXTEND(SP, 6);
        PUSHs(encoding);
diff --git a/utf8.c b/utf8.c
index b9455bc..2a7a3d0 100644 (file)
--- a/utf8.c
+++ b/utf8.c
@@ -2407,6 +2407,7 @@ Perl__core_swash_init(pTHX_ const char* pkg, const char* name, SV *listsv, I32 m
        PUSHSTACKi(PERLSI_MAGIC);
        ENTER;
        SAVEHINTS();
+       save_re_context();
        /* We might get here via a subroutine signature which uses a utf8
         * parameter name, at which point PL_subname will have been set
         * but not yet used. */
@@ -2421,6 +2422,10 @@ Perl__core_swash_init(pTHX_ const char* pkg, const char* name, SV *listsv, I32 m
 #ifndef NO_TAINT_SUPPORT
            /* It is assumed that callers of this routine are not passing in
             * any user derived data.  */
+           /* Need to do this after save_re_context() as it will set
+            * PL_tainted to 1 while saving $1 etc (see the code after getrx:
+            * in Perl_magic_get).  Even line to create errsv_save can turn on
+            * PL_tainted.  */
            SAVEBOOL(TAINT_get);
            TAINT_NOT;
 #endif
diff --git a/util.c b/util.c
index e4e684c..8cf62f5 100644 (file)
--- a/util.c
+++ b/util.c
@@ -1529,6 +1529,7 @@ S_invoke_exception_hook(pTHX_ SV *ex, bool warn)
        SV *exarg;
 
        ENTER;
+       save_re_context();
        if (warn) {
            SAVESPTR(*hook);
            *hook = NULL;