From 65ec73b1bc79648a2daeb494552ce0b0b90348d7 Mon Sep 17 00:00:00 2001 From: Tony Cook Date: Mon, 10 Aug 2020 16:26:30 +1000 Subject: [PATCH 1/3] Data::Dumper: don't leak the working retval MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit do this by mortalizing the SV on creation, rather than when we push it on the stack Petr Písař: Ported to Data-Dumper-2.173 from 41463160be4baa0d81d9d8297508a1b9bdcaa206 perl commit. Signed-off-by: Petr Písař --- Dumper.xs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Dumper.xs b/Dumper.xs index a324cb6..f91145a 100644 --- a/Dumper.xs +++ b/Dumper.xs @@ -1541,7 +1541,7 @@ Data_Dumper_Dumpxs(href, ...) seenhv = NULL; name = sv_newmortal(); - retval = newSVpvs(""); + retval = newSVpvs_flags("", SVs_TEMP); if (SvROK(href) && (hv = (HV*)SvRV((SV*)href)) && SvTYPE(hv) == SVt_PVHV) { @@ -1714,9 +1714,9 @@ Data_Dumper_Dumpxs(href, ...) } SvPVCLEAR(valstr); if (gimme == G_ARRAY) { - XPUSHs(sv_2mortal(retval)); + XPUSHs(retval); if (i < imax) /* not the last time thro ? */ - retval = newSVpvs(""); + retval = newSVpvs_flags("", SVs_TEMP); } } SvREFCNT_dec(postav); @@ -1732,7 +1732,7 @@ Data_Dumper_Dumpxs(href, ...) else croak("Call to new() method failed to return HASH ref"); if (gimme != G_ARRAY) - XPUSHs(sv_2mortal(retval)); + XPUSHs(retval); } SV * -- 2.25.4