c07a2fa
commit 6ad76e39ed152a180816212ff7b4f798b1ab9bf0
c07a2fa
Author: Jirka Hruška <jirka@fud.cz>
c07a2fa
Date:   Wed Sep 1 11:18:43 2010 +0100
c07a2fa
c07a2fa
    PL_my_cxt_list leaks
c07a2fa
    
c07a2fa
    [perl #77352]
c07a2fa
    
c07a2fa
    PL_my_cxt_list was never freed
c07a2fa
c07a2fa
diff --git a/perl.c b/perl.c
c07a2fa
index dfb549d..0acd7ff 100644
c07a2fa
--- a/perl.c
c07a2fa
+++ b/perl.c
c07a2fa
@@ -1069,6 +1069,10 @@ perl_destruct(pTHXx)
c07a2fa
 			     (long)cxstack_ix + 1);
c07a2fa
     }
c07a2fa
 
c07a2fa
+    /* the entries in this list are allocated via SV PVX's, so get freed
c07a2fa
+     * in sv_clean_all */
c07a2fa
+    Safefree(PL_my_cxt_list);
c07a2fa
+
c07a2fa
     /* Now absolutely destruct everything, somehow or other, loops or no. */
c07a2fa
 
c07a2fa
     /* the 2 is for PL_fdpid and PL_strtab */
c07a2fa
c07a2fa
commit 56d1e8d38e36ab7813af488eb8759b90bc82dd4a
c07a2fa
Author: Jirka Hruška <jirka@fud.cz>
c07a2fa
Date:   Wed Sep 1 10:59:35 2010 +0100
c07a2fa
c07a2fa
    Memory leak cloning PVGVs
c07a2fa
    
c07a2fa
    [perl #77352]
c07a2fa
    
c07a2fa
    In S_sv_dup_common, Perl_rvpv_dup was called twice on a non-GP PVGV value,
c07a2fa
    causing the first duped value to be leaked
c07a2fa
c07a2fa
diff --git a/AUTHORS b/AUTHORS
c07a2fa
index 24ac6c3..7fc93a1 100644
c07a2fa
--- a/AUTHORS
c07a2fa
+++ b/AUTHORS
c07a2fa
@@ -487,6 +487,7 @@ Jim Meyering			<meyering@asic.sc.ti.com>
c07a2fa
 Jim Miner			<jfm@winternet.com>
c07a2fa
 Jim Richardson
c07a2fa
 Jim Schneider			<jschneid@netilla.com>
c07a2fa
+Jirka Hruška			<jirka@fud.cz>
c07a2fa
 Joachim Huober
c07a2fa
 Jochen Wiedmann			<joe@ispsoft.de>
c07a2fa
 Jody Belka			<dev-perl@pimb.org>
c07a2fa
diff --git a/sv.c b/sv.c
c07a2fa
index b6c03ed..11587d4 100644
c07a2fa
--- a/sv.c
c07a2fa
+++ b/sv.c
c07a2fa
@@ -11120,6 +11120,7 @@ Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
c07a2fa
 		else
c07a2fa
 		    LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
c07a2fa
 	    case SVt_PVGV:
c07a2fa
+		/* non-GP case already handled above */
c07a2fa
 		if(isGV_with_GP(sstr)) {
c07a2fa
 		    GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
c07a2fa
 		    /* Don't call sv_add_backref here as it's going to be
c07a2fa
@@ -11143,8 +11144,7 @@ Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
c07a2fa
 		    }
c07a2fa
 		    GvGP(dstr)	= gp_dup(GvGP(sstr), param);
c07a2fa
 		    (void)GpREFCNT_inc(GvGP(dstr));
c07a2fa
-		} else
c07a2fa
-		    Perl_rvpv_dup(aTHX_ dstr, sstr, param);
c07a2fa
+		}
c07a2fa
 		break;
c07a2fa
 	    case SVt_PVIO:
c07a2fa
 		IoIFP(dstr)	= fp_dup(IoIFP(dstr), IoTYPE(dstr), param);