commit
30b46c0926
@ -0,0 +1 @@
|
||||
SOURCES/Data-Dumper-2.173.tar.gz
|
@ -0,0 +1 @@
|
||||
91ca53fd5499b913996009e763d73ebeb51be8c3 SOURCES/Data-Dumper-2.173.tar.gz
|
@ -0,0 +1,243 @@
|
||||
From 900c00b2ae29aa10b5cf0b3b5c55aff7501fc382 Mon Sep 17 00:00:00 2001
|
||||
From: Tony Cook <tony@develop-help.com>
|
||||
Date: Wed, 12 Aug 2020 16:20:16 +1000
|
||||
Subject: [PATCH 3/3] Data::Dumper (XS): use mortals to prevent leaks if magic
|
||||
throws
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
For example:
|
||||
|
||||
use Tie::Scalar;
|
||||
use Data::Dumper;
|
||||
sub T::TIESCALAR { bless {}, shift}
|
||||
sub T::FETCH { die }
|
||||
my $x;
|
||||
tie $x, "T" or die;
|
||||
while(1) {
|
||||
eval { () = Dumper( [ \$x ] ) };
|
||||
}
|
||||
|
||||
would leak various work SVs.
|
||||
|
||||
I start a new scope (ENTER/LEAVE) for most recursive DD_dump() calls
|
||||
so that the work SVs don't accumulate on the temps stack, for example
|
||||
if we're dumping a large array we'd end up with several SVs on the
|
||||
temp stack for each member of the array.
|
||||
|
||||
The exceptions are where I don't expect a large number of unreleased
|
||||
temps to accumulate, as with scalar or glob refs.
|
||||
|
||||
Petr Písař: Ported to Data-Dumper-2.173 from
|
||||
815b4be4ab7ae210f796fc9d29754e55fc0d1f0e perl commit.
|
||||
|
||||
Signed-off-by: Petr Písař <ppisar@redhat.com>
|
||||
---
|
||||
Dumper.xs | 52 ++++++++++++++++++++++++++++------------------------
|
||||
1 file changed, 28 insertions(+), 24 deletions(-)
|
||||
|
||||
diff --git a/Dumper.xs b/Dumper.xs
|
||||
index d4b34ad..65639ae 100644
|
||||
--- a/Dumper.xs
|
||||
+++ b/Dumper.xs
|
||||
@@ -808,12 +808,13 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
|
||||
sv_catpvs(retval, "( ");
|
||||
if (style->indent >= 2) {
|
||||
blesspad = apad;
|
||||
- apad = newSVsv(apad);
|
||||
+ apad = sv_2mortal(newSVsv(apad));
|
||||
sv_x(aTHX_ apad, " ", 1, blesslen+2);
|
||||
}
|
||||
}
|
||||
|
||||
ipad = sv_x(aTHX_ Nullsv, SvPVX_const(style->xpad), SvCUR(style->xpad), level+1);
|
||||
+ sv_2mortal(ipad);
|
||||
|
||||
if (is_regex)
|
||||
{
|
||||
@@ -878,7 +879,7 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
|
||||
realtype <= SVt_PVMG
|
||||
#endif
|
||||
) { /* scalar ref */
|
||||
- SV * const namesv = newSVpvs("${");
|
||||
+ SV * const namesv = sv_2mortal(newSVpvs("${"));
|
||||
sv_catpvn(namesv, name, namelen);
|
||||
sv_catpvs(namesv, "}");
|
||||
if (realpack) { /* blessed */
|
||||
@@ -892,7 +893,6 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
|
||||
DD_dump(aTHX_ ival, SvPVX_const(namesv), SvCUR(namesv), retval, seenhv,
|
||||
postav, level+1, apad, style);
|
||||
}
|
||||
- SvREFCNT_dec(namesv);
|
||||
}
|
||||
else if (realtype == SVt_PVGV) { /* glob ref */
|
||||
SV * const namesv = newSVpvs("*{");
|
||||
@@ -908,9 +908,10 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
|
||||
SSize_t ix = 0;
|
||||
const SSize_t ixmax = av_len((AV *)ival);
|
||||
|
||||
- SV * const ixsv = newSViv(0);
|
||||
+ SV * const ixsv = sv_2mortal(newSViv(0));
|
||||
/* allowing for a 24 char wide array index */
|
||||
New(0, iname, namelen+28, char);
|
||||
+ SAVEFREEPV(iname);
|
||||
(void) strlcpy(iname, name, namelen+28);
|
||||
inamelen = namelen;
|
||||
if (name[0] == '@') {
|
||||
@@ -940,7 +941,7 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
|
||||
iname[inamelen++] = '-'; iname[inamelen++] = '>';
|
||||
}
|
||||
iname[inamelen++] = '['; iname[inamelen] = '\0';
|
||||
- totpad = newSVsv(style->sep);
|
||||
+ totpad = sv_2mortal(newSVsv(style->sep));
|
||||
sv_catsv(totpad, style->pad);
|
||||
sv_catsv(totpad, apad);
|
||||
|
||||
@@ -970,8 +971,12 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
|
||||
}
|
||||
sv_catsv(retval, totpad);
|
||||
sv_catsv(retval, ipad);
|
||||
+ ENTER;
|
||||
+ SAVETMPS;
|
||||
DD_dump(aTHX_ elem, iname, ilen, retval, seenhv, postav,
|
||||
level+1, apad, style);
|
||||
+ FREETMPS;
|
||||
+ LEAVE;
|
||||
if (ix < ixmax || (style->trailingcomma && style->indent >= 1))
|
||||
sv_catpvs(retval, ",");
|
||||
}
|
||||
@@ -985,9 +990,6 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
|
||||
sv_catpvs(retval, ")");
|
||||
else
|
||||
sv_catpvs(retval, "]");
|
||||
- SvREFCNT_dec(ixsv);
|
||||
- SvREFCNT_dec(totpad);
|
||||
- Safefree(iname);
|
||||
}
|
||||
else if (realtype == SVt_PVHV) {
|
||||
SV *totpad, *newapad;
|
||||
@@ -997,7 +999,7 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
|
||||
SV *hval;
|
||||
AV *keys = NULL;
|
||||
|
||||
- SV * const iname = newSVpvn(name, namelen);
|
||||
+ SV * const iname = newSVpvn_flags(name, namelen, SVs_TEMP);
|
||||
if (name[0] == '%') {
|
||||
sv_catpvs(retval, "(");
|
||||
(SvPVX(iname))[0] = '$';
|
||||
@@ -1021,7 +1023,7 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
|
||||
sv_catpvs(iname, "->");
|
||||
}
|
||||
sv_catpvs(iname, "{");
|
||||
- totpad = newSVsv(style->sep);
|
||||
+ totpad = sv_2mortal(newSVsv(style->sep));
|
||||
sv_catsv(totpad, style->pad);
|
||||
sv_catsv(totpad, apad);
|
||||
|
||||
@@ -1117,6 +1119,10 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
|
||||
|
||||
sv_catsv(retval, totpad);
|
||||
sv_catsv(retval, ipad);
|
||||
+
|
||||
+ ENTER;
|
||||
+ SAVETMPS;
|
||||
+
|
||||
/* The (very)
|
||||
old logic was first to check utf8 flag, and if utf8 always
|
||||
call esc_q_utf8. This caused test to break under -Mutf8,
|
||||
@@ -1143,6 +1149,7 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
|
||||
else {
|
||||
nticks = num_q(key, klen);
|
||||
New(0, nkey_buffer, klen+nticks+3, char);
|
||||
+ SAVEFREEPV(nkey_buffer);
|
||||
nkey = nkey_buffer;
|
||||
nkey[0] = '\'';
|
||||
if (nticks)
|
||||
@@ -1160,7 +1167,8 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
|
||||
nlen = klen;
|
||||
sv_catpvn(retval, nkey, klen);
|
||||
}
|
||||
- sname = newSVsv(iname);
|
||||
+
|
||||
+ sname = sv_2mortal(newSVsv(iname));
|
||||
sv_catpvn(sname, nkey, nlen);
|
||||
sv_catpvs(sname, "}");
|
||||
|
||||
@@ -1168,7 +1176,7 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
|
||||
if (style->indent >= 2) {
|
||||
char *extra;
|
||||
STRLEN elen = 0;
|
||||
- newapad = newSVsv(apad);
|
||||
+ newapad = sv_2mortal(newSVsv(apad));
|
||||
New(0, extra, klen+4+1, char);
|
||||
while (elen < (klen+4))
|
||||
extra[elen++] = ' ';
|
||||
@@ -1181,10 +1189,9 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
|
||||
|
||||
DD_dump(aTHX_ hval, SvPVX_const(sname), SvCUR(sname), retval, seenhv,
|
||||
postav, level+1, newapad, style);
|
||||
- SvREFCNT_dec(sname);
|
||||
- Safefree(nkey_buffer);
|
||||
- if (style->indent >= 2)
|
||||
- SvREFCNT_dec(newapad);
|
||||
+
|
||||
+ FREETMPS;
|
||||
+ LEAVE;
|
||||
}
|
||||
if (i) {
|
||||
SV *opad = sv_x(aTHX_ Nullsv, SvPVX_const(style->xpad),
|
||||
@@ -1199,8 +1206,6 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
|
||||
sv_catpvs(retval, ")");
|
||||
else
|
||||
sv_catpvs(retval, "}");
|
||||
- SvREFCNT_dec(iname);
|
||||
- SvREFCNT_dec(totpad);
|
||||
}
|
||||
else if (realtype == SVt_PVCV) {
|
||||
if (style->deparse) {
|
||||
@@ -1247,7 +1252,6 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
|
||||
STRLEN plen, pticks;
|
||||
|
||||
if (style->indent >= 2) {
|
||||
- SvREFCNT_dec(apad);
|
||||
apad = blesspad;
|
||||
}
|
||||
sv_catpvs(retval, ", '");
|
||||
@@ -1276,7 +1280,6 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
|
||||
sv_catpvs(retval, "()");
|
||||
}
|
||||
}
|
||||
- SvREFCNT_dec(ipad);
|
||||
}
|
||||
else {
|
||||
STRLEN i;
|
||||
@@ -1671,20 +1674,21 @@ Data_Dumper_Dumpxs(href, ...)
|
||||
|
||||
if (style.indent >= 2 && !terse) {
|
||||
SV * const tmpsv = sv_x(aTHX_ NULL, " ", 1, SvCUR(name)+3);
|
||||
- newapad = newSVsv(apad);
|
||||
+ newapad = sv_2mortal(newSVsv(apad));
|
||||
sv_catsv(newapad, tmpsv);
|
||||
SvREFCNT_dec(tmpsv);
|
||||
}
|
||||
else
|
||||
newapad = apad;
|
||||
|
||||
+ ENTER;
|
||||
+ SAVETMPS;
|
||||
PUTBACK;
|
||||
DD_dump(aTHX_ val, SvPVX_const(name), SvCUR(name), valstr, seenhv,
|
||||
postav, 0, newapad, &style);
|
||||
SPAGAIN;
|
||||
-
|
||||
- if (style.indent >= 2 && !terse)
|
||||
- SvREFCNT_dec(newapad);
|
||||
+ FREETMPS;
|
||||
+ LEAVE;
|
||||
|
||||
postlen = av_len(postav);
|
||||
if (postlen >= 0 || !terse) {
|
||||
--
|
||||
2.25.4
|
||||
|
@ -0,0 +1,167 @@
|
||||
From d9c4b4ae5a1a17347ff5e3ecbf8e1d9da481f476 Mon Sep 17 00:00:00 2001
|
||||
From: David Mitchell <davem@iabyn.com>
|
||||
Date: Wed, 3 Apr 2019 13:23:24 +0100
|
||||
Subject: [PATCH] Data::Dumper - avoid leak on croak
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
v5.21.3-742-g19be3be696 added a facility to Dumper.xs to croak if the
|
||||
recursion level became too deep (1000 by default).
|
||||
|
||||
The trouble with this is that various parts of DD_dump() allocate
|
||||
temporary SVs and buffers, which will leak if DD_dump() unceremoniously
|
||||
just croaks().
|
||||
|
||||
This currently manifests as dist/Data-Dumper/t/recurse.t failing under
|
||||
Address Sanitiser.
|
||||
|
||||
This commit makes the depth checking code just set a sticky 'too deep'
|
||||
boolean flag, and
|
||||
a) on entry, DD_dump() just returns immediately if the flag is set;
|
||||
b) the flag is checked by the top-level called of DD_dump() and croaks
|
||||
if set.
|
||||
|
||||
So the net effect is to defer croaking until the dump is complete,
|
||||
and avoid any further recursion once the flag is set.
|
||||
|
||||
This is a bit of a quick fix. More long-term solutions would be to
|
||||
convert DD_dump() to be iterative rather than recursive, and/or make
|
||||
sure all temporary SVs and buffers are suitably anchored somewhere so
|
||||
that they get cleaned up on croak.
|
||||
|
||||
Petr Písař: Ported from 6d65cb5d847ac93680949c4fa02111808207fbdc in
|
||||
perl git tree.
|
||||
|
||||
Signed-off-by: Petr Písař <ppisar@redhat.com>
|
||||
---
|
||||
Dumper.pm | 6 +++---
|
||||
Dumper.xs | 27 ++++++++++++++++++++-------
|
||||
2 files changed, 23 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/Dumper.pm b/Dumper.pm
|
||||
index 40aeb7d..06af4c4 100644
|
||||
--- a/Dumper.pm
|
||||
+++ b/Dumper.pm
|
||||
@@ -10,7 +10,7 @@
|
||||
package Data::Dumper;
|
||||
|
||||
BEGIN {
|
||||
- $VERSION = '2.173'; # Don't forget to set version and release
|
||||
+ $VERSION = '2.174'; # Don't forget to set version and release
|
||||
} # date in POD below!
|
||||
|
||||
#$| = 1;
|
||||
@@ -1461,13 +1461,13 @@ be to use the C<Sortkeys> filter of Data::Dumper.
|
||||
|
||||
Gurusamy Sarathy gsar@activestate.com
|
||||
|
||||
-Copyright (c) 1996-2017 Gurusamy Sarathy. All rights reserved.
|
||||
+Copyright (c) 1996-2019 Gurusamy Sarathy. All rights reserved.
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the same terms as Perl itself.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
-Version 2.173
|
||||
+Version 2.174
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
diff --git a/Dumper.xs b/Dumper.xs
|
||||
index 7f0b027..a324cb6 100644
|
||||
--- a/Dumper.xs
|
||||
+++ b/Dumper.xs
|
||||
@@ -61,9 +61,10 @@
|
||||
#endif
|
||||
|
||||
/* This struct contains almost all the user's desired configuration, and it
|
||||
- * is treated as constant by the recursive function. This arrangement has
|
||||
- * the advantage of needing less memory than passing all of them on the
|
||||
- * stack all the time (as was the case in an earlier implementation). */
|
||||
+ * is treated as mostly constant (except for maxrecursed) by the recursive
|
||||
+ * function. This arrangement has the advantage of needing less memory
|
||||
+ * than passing all of them on the stack all the time (as was the case in
|
||||
+ * an earlier implementation). */
|
||||
typedef struct {
|
||||
SV *pad;
|
||||
SV *xpad;
|
||||
@@ -74,6 +75,7 @@ typedef struct {
|
||||
SV *toaster;
|
||||
SV *bless;
|
||||
IV maxrecurse;
|
||||
+ bool maxrecursed; /* at some point we exceeded the maximum recursion level */
|
||||
I32 indent;
|
||||
I32 purity;
|
||||
I32 deepcopy;
|
||||
@@ -97,7 +99,7 @@ static bool safe_decimal_number(const char *p, STRLEN len);
|
||||
static SV *sv_x (pTHX_ SV *sv, const char *str, STRLEN len, I32 n);
|
||||
static I32 DD_dump (pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval,
|
||||
HV *seenhv, AV *postav, const I32 level, SV *apad,
|
||||
- const Style *style);
|
||||
+ Style *style);
|
||||
|
||||
#ifndef HvNAME_get
|
||||
#define HvNAME_get HvNAME
|
||||
@@ -615,7 +617,7 @@ deparsed_output(pTHX_ SV *val)
|
||||
*/
|
||||
static I32
|
||||
DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
|
||||
- AV *postav, const I32 level, SV *apad, const Style *style)
|
||||
+ AV *postav, const I32 level, SV *apad, Style *style)
|
||||
{
|
||||
char tmpbuf[128];
|
||||
Size_t i;
|
||||
@@ -642,6 +644,9 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
|
||||
if (!val)
|
||||
return 0;
|
||||
|
||||
+ if (style->maxrecursed)
|
||||
+ return 0;
|
||||
+
|
||||
/* If the output buffer has less than some arbitrary amount of space
|
||||
remaining, then enlarge it. For the test case (25M of output),
|
||||
*1.1 was slower, *2.0 was the same, so the first guess of 1.5 is
|
||||
@@ -793,7 +798,7 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
|
||||
}
|
||||
|
||||
if (style->maxrecurse > 0 && level >= style->maxrecurse) {
|
||||
- croak("Recursion limit of %" IVdf " exceeded", style->maxrecurse);
|
||||
+ style->maxrecursed = TRUE;
|
||||
}
|
||||
|
||||
if (realpack && !no_bless) { /* we have a blessed ref */
|
||||
@@ -1528,6 +1533,7 @@ Data_Dumper_Dumpxs(href, ...)
|
||||
style.indent = 2;
|
||||
style.quotekeys = 1;
|
||||
style.maxrecurse = 1000;
|
||||
+ style.maxrecursed = FALSE;
|
||||
style.purity = style.deepcopy = style.useqq = style.maxdepth
|
||||
= style.use_sparse_seen_hash = style.trailingcomma = 0;
|
||||
style.pad = style.xpad = style.sep = style.pair = style.sortkeys
|
||||
@@ -1675,7 +1681,7 @@ Data_Dumper_Dumpxs(href, ...)
|
||||
DD_dump(aTHX_ val, SvPVX_const(name), SvCUR(name), valstr, seenhv,
|
||||
postav, 0, newapad, &style);
|
||||
SPAGAIN;
|
||||
-
|
||||
+
|
||||
if (style.indent >= 2 && !terse)
|
||||
SvREFCNT_dec(newapad);
|
||||
|
||||
@@ -1715,6 +1721,13 @@ Data_Dumper_Dumpxs(href, ...)
|
||||
}
|
||||
SvREFCNT_dec(postav);
|
||||
SvREFCNT_dec(valstr);
|
||||
+
|
||||
+ /* we defer croaking until here so that temporary SVs and
|
||||
+ * buffers won't be leaked */
|
||||
+ if (style.maxrecursed)
|
||||
+ croak("Recursion limit of %" IVdf " exceeded",
|
||||
+ style.maxrecurse);
|
||||
+
|
||||
}
|
||||
else
|
||||
croak("Call to new() method failed to return HASH ref");
|
||||
--
|
||||
2.20.1
|
||||
|
@ -0,0 +1,56 @@
|
||||
From 65ec73b1bc79648a2daeb494552ce0b0b90348d7 Mon Sep 17 00:00:00 2001
|
||||
From: Tony Cook <tony@develop-help.com>
|
||||
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ř <ppisar@redhat.com>
|
||||
---
|
||||
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
|
||||
|
@ -0,0 +1,53 @@
|
||||
From 21e67795792e5e1d25bcbd3b167ed18d0d6dc7b4 Mon Sep 17 00:00:00 2001
|
||||
From: Tony Cook <tony@develop-help.com>
|
||||
Date: Tue, 11 Aug 2020 10:46:38 +1000
|
||||
Subject: [PATCH 2/3] make postav and valstr mortal so they're freed soonish
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
these can leak if the value being dumped (or any part of it)
|
||||
had get magic and that magic throws an exception.
|
||||
|
||||
Several other SVs can also leak in that case, but cleaning those up
|
||||
is more complex.
|
||||
|
||||
Petr Písař: Ported to Data-Dumper-2.173 from
|
||||
b98a3a6d08f681353d0b357fd1cce437c93656e7 perl commit.
|
||||
|
||||
Signed-off-by: Petr Písař <ppisar@redhat.com>
|
||||
---
|
||||
Dumper.xs | 5 ++---
|
||||
1 file changed, 2 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/Dumper.xs b/Dumper.xs
|
||||
index f91145a..d4b34ad 100644
|
||||
--- a/Dumper.xs
|
||||
+++ b/Dumper.xs
|
||||
@@ -1613,12 +1613,13 @@ Data_Dumper_Dumpxs(href, ...)
|
||||
style.sortkeys = &PL_sv_yes;
|
||||
}
|
||||
postav = newAV();
|
||||
+ sv_2mortal((SV*)postav);
|
||||
|
||||
if (todumpav)
|
||||
imax = av_len(todumpav);
|
||||
else
|
||||
imax = -1;
|
||||
- valstr = newSVpvs("");
|
||||
+ valstr = newSVpvs_flags("", SVs_TEMP);
|
||||
for (i = 0; i <= imax; ++i) {
|
||||
SV *newapad;
|
||||
|
||||
@@ -1719,8 +1720,6 @@ Data_Dumper_Dumpxs(href, ...)
|
||||
retval = newSVpvs_flags("", SVs_TEMP);
|
||||
}
|
||||
}
|
||||
- SvREFCNT_dec(postav);
|
||||
- SvREFCNT_dec(valstr);
|
||||
|
||||
/* we defer croaking until here so that temporary SVs and
|
||||
* buffers won't be leaked */
|
||||
--
|
||||
2.25.4
|
||||
|
@ -0,0 +1,286 @@
|
||||
%global base_version 2.173
|
||||
|
||||
Name: perl-Data-Dumper
|
||||
Version: 2.174
|
||||
Release: 462%{?dist}
|
||||
Summary: Stringify perl data structures, suitable for printing and eval
|
||||
License: GPL+ or Artistic
|
||||
URL: https://metacpan.org/release/Data-Dumper
|
||||
Source0: https://cpan.metacpan.org/authors/id/X/XS/XSAWYERX/Data-Dumper-%{base_version}.tar.gz
|
||||
# Fix a memory leak when croaking about a too deep recursion,
|
||||
# fixed in perl after 5.29.9
|
||||
Patch0: Data-Dumper-2.173-Data-Dumper-avoid-leak-on-croak.patch
|
||||
# 1/3 Fix a memory leak when a magic throws an exception,
|
||||
# fixed in perl after 5.33.0
|
||||
Patch1: Data-Dumper-2.173-Data-Dumper-don-t-leak-the-working-retval.patch
|
||||
# 2/3 Fix a memory leak when a magic throws an exception,
|
||||
# fixed in perl after 5.33.0
|
||||
Patch2: Data-Dumper-2.173-make-postav-and-valstr-mortal-so-they-re-freed-sooni.patch
|
||||
# 3/3 Fix a memory leak when a magic throws an exception,
|
||||
# fixed in perl after 5.33.0
|
||||
Patch3: Data-Dumper-2.173-Data-Dumper-XS-use-mortals-to-prevent-leaks-if-magic.patch
|
||||
BuildRequires: findutils
|
||||
BuildRequires: gcc
|
||||
BuildRequires: make
|
||||
BuildRequires: perl-devel
|
||||
BuildRequires: perl-generators
|
||||
BuildRequires: perl-interpreter
|
||||
BuildRequires: perl(ExtUtils::MakeMaker) >= 6.76
|
||||
BuildRequires: perl(File::Copy)
|
||||
BuildRequires: perl(strict)
|
||||
# perl-Test-Simple is in cycle with perl-Data-Dumper
|
||||
%if !%{defined perl_bootstrap}
|
||||
# Run-time:
|
||||
BuildRequires: perl(B::Deparse)
|
||||
BuildRequires: perl(bytes)
|
||||
BuildRequires: perl(Carp)
|
||||
BuildRequires: perl(constant)
|
||||
BuildRequires: perl(Exporter)
|
||||
BuildRequires: perl(Scalar::Util)
|
||||
BuildRequires: perl(XSLoader)
|
||||
# Tests only:
|
||||
BuildRequires: perl(Config)
|
||||
BuildRequires: perl(if)
|
||||
BuildRequires: perl(lib)
|
||||
BuildRequires: perl(overload)
|
||||
BuildRequires: perl(strict)
|
||||
BuildRequires: perl(Test::More) >= 0.98
|
||||
BuildRequires: perl(vars)
|
||||
BuildRequires: perl(warnings)
|
||||
# Optional tests:
|
||||
BuildRequires: perl(Encode)
|
||||
%endif
|
||||
Requires: perl(:MODULE_COMPAT_%(eval "`perl -V:version`"; echo $version))
|
||||
Requires: perl(B::Deparse)
|
||||
Requires: perl(bytes)
|
||||
Requires: perl(Scalar::Util)
|
||||
Requires: perl(XSLoader)
|
||||
|
||||
%{?perl_default_filter}
|
||||
|
||||
%description
|
||||
Given a list of scalars or reference variables, writes out their contents
|
||||
in perl syntax. The references can also be objects. The content of each
|
||||
variable is output in a single Perl statement. Handles self-referential
|
||||
structures correctly.
|
||||
|
||||
%prep
|
||||
%setup -q -n Data-Dumper-%{base_version}
|
||||
%patch0 -p1
|
||||
%patch1 -p1
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
|
||||
%build
|
||||
perl Makefile.PL INSTALLDIRS=vendor NO_PACKLIST=1 NO_PERLLOCAL=1 OPTIMIZE="$RPM_OPT_FLAGS"
|
||||
%{make_build}
|
||||
|
||||
%install
|
||||
%{make_install}
|
||||
find $RPM_BUILD_ROOT -type f -name '*.bs' -size 0 -delete
|
||||
%{_fixperms} $RPM_BUILD_ROOT/*
|
||||
|
||||
%check
|
||||
%if !%{defined perl_bootstrap}
|
||||
make test
|
||||
%endif
|
||||
|
||||
%files
|
||||
%doc Changes Todo
|
||||
%{perl_vendorarch}/auto/*
|
||||
%{perl_vendorarch}/Data*
|
||||
%{_mandir}/man3/*
|
||||
|
||||
%changelog
|
||||
* Wed Mar 15 2023 MSVSphere Packaging Team <packager@msvsphere.ru> - 2.174-462
|
||||
- Rebuilt for MSVSphere 9.1.
|
||||
|
||||
* Mon Aug 09 2021 Mohan Boddu <mboddu@redhat.com> - 2.174-462
|
||||
- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
|
||||
Related: rhbz#1991688
|
||||
|
||||
* Fri Apr 16 2021 Mohan Boddu <mboddu@redhat.com> - 2.174-461
|
||||
- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937
|
||||
|
||||
* Wed Jan 27 2021 Fedora Release Engineering <releng@fedoraproject.org> - 2.174-460
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
|
||||
|
||||
* Thu Aug 20 2020 Petr Pisar <ppisar@redhat.com> - 2.174-459
|
||||
- Fix a memory leak when a magic throws an exception
|
||||
|
||||
* Tue Jul 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 2.174-458
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
|
||||
|
||||
* Fri Jun 26 2020 Jitka Plesnikova <jplesnik@redhat.com> - 2.174-457
|
||||
- Perl 5.32 re-rebuild of bootstrapped packages
|
||||
|
||||
* Mon Jun 22 2020 Jitka Plesnikova <jplesnik@redhat.com> - 2.174-456
|
||||
- Increase release to favour standalone package
|
||||
|
||||
* Tue Feb 04 2020 Petr Pisar <ppisar@redhat.com> - 2.174-443
|
||||
- Modernize the spec file
|
||||
|
||||
* Tue Feb 04 2020 Tom Stellard <tstellar@redhat.com> - 2.174-442
|
||||
- Use make_build macro
|
||||
- https://docs.fedoraproject.org/en-US/packaging-guidelines/#_parallel_make
|
||||
|
||||
* Wed Jan 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 2.174-441
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
|
||||
|
||||
* Fri Jul 26 2019 Fedora Release Engineering <releng@fedoraproject.org> - 2.174-440
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
|
||||
|
||||
* Sun Jun 02 2019 Jitka Plesnikova <jplesnik@redhat.com> - 2.174-439
|
||||
- Perl 5.30 re-rebuild of bootstrapped packages
|
||||
|
||||
* Thu May 30 2019 Jitka Plesnikova <jplesnik@redhat.com> - 2.174-438
|
||||
- Increase release to favour standalone package
|
||||
|
||||
* Fri Apr 26 2019 Jitka Plesnikova <jplesnik@redhat.com> - 2.174-1
|
||||
- Update version to 2.174 as provided in perl-5.29.10
|
||||
|
||||
* Wed Apr 03 2019 Petr Pisar <ppisar@redhat.com> - 2.173-3
|
||||
- Fix a memory leak when croaking about a too deep recursion
|
||||
|
||||
* Fri Feb 01 2019 Fedora Release Engineering <releng@fedoraproject.org> - 2.173-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
|
||||
|
||||
* Mon Nov 12 2018 Petr Pisar <ppisar@redhat.com> - 2.173-1
|
||||
- 2.173 bump
|
||||
|
||||
* Thu Sep 20 2018 Jitka Plesnikova <jplesnik@redhat.com> - 2.172-1
|
||||
- 2.172 bump
|
||||
|
||||
* Fri Jul 13 2018 Fedora Release Engineering <releng@fedoraproject.org> - 2.170-418
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
|
||||
|
||||
* Sat Jun 30 2018 Jitka Plesnikova <jplesnik@redhat.com> - 2.170-417
|
||||
- Perl 5.28 re-rebuild of bootstrapped packages
|
||||
|
||||
* Wed Jun 27 2018 Jitka Plesnikova <jplesnik@redhat.com> - 2.170-416
|
||||
- Increase release to favour standalone package
|
||||
|
||||
* Wed May 23 2018 Jitka Plesnikova <jplesnik@redhat.com> - 2.170-1
|
||||
- Upgrade to 2.170 as provided in perl-5.28.0-RC1
|
||||
|
||||
* Thu Feb 08 2018 Fedora Release Engineering <releng@fedoraproject.org> - 2.167-399
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
|
||||
|
||||
* Thu Jan 11 2018 Petr Pisar <ppisar@redhat.com> - 2.167-398
|
||||
- Fix postentry for quoted glob (bug #1532524)
|
||||
|
||||
* Tue Dec 05 2017 Petr Pisar <ppisar@redhat.com> - 2.167-397
|
||||
- Fix quoting glob names (RT#119831)
|
||||
|
||||
* Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2.167-396
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
|
||||
|
||||
* Thu Jul 27 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2.167-395
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
|
||||
|
||||
* Wed Jun 07 2017 Jitka Plesnikova <jplesnik@redhat.com> - 2.167-394
|
||||
- Perl 5.26 re-rebuild of bootstrapped packages
|
||||
|
||||
* Sat Jun 03 2017 Jitka Plesnikova <jplesnik@redhat.com> - 2.167-393
|
||||
- Perl 5.26 rebuild
|
||||
|
||||
* Thu May 11 2017 Petr Pisar <ppisar@redhat.com> - 2.167-1
|
||||
- Upgrade to 2.167 as provided in perl-5.25.12
|
||||
|
||||
* Sat Feb 11 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2.161-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
|
||||
|
||||
* Tue Jul 12 2016 Petr Pisar <ppisar@redhat.com> - 2.161-1
|
||||
- 1.161 bump
|
||||
|
||||
* Wed May 18 2016 Jitka Plesnikova <jplesnik@redhat.com> - 2.160-366
|
||||
- Perl 5.24 re-rebuild of bootstrapped packages
|
||||
|
||||
* Sat May 14 2016 Jitka Plesnikova <jplesnik@redhat.com> - 2.160-365
|
||||
- Increase release to favour standalone package
|
||||
|
||||
* Wed May 11 2016 Jitka Plesnikova <jplesnik@redhat.com> - 2.160-1
|
||||
- 2.160 bump in order to dual-live with perl 5.24
|
||||
|
||||
* Thu Feb 04 2016 Fedora Release Engineering <releng@fedoraproject.org> - 2.158-348
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
|
||||
|
||||
* Thu Jun 18 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.158-347
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
|
||||
|
||||
* Wed Jun 10 2015 Jitka Plesnikova <jplesnik@redhat.com> - 2.158-346
|
||||
- Perl 5.22 re-rebuild of bootstrapped packages
|
||||
|
||||
* Thu Jun 04 2015 Jitka Plesnikova <jplesnik@redhat.com> - 2.158-345
|
||||
- Increase release to favour standalone package
|
||||
|
||||
* Wed Jun 03 2015 Jitka Plesnikova <jplesnik@redhat.com> - 2.158-2
|
||||
- Perl 5.22 rebuild
|
||||
|
||||
* Wed May 06 2015 Petr Pisar <ppisar@redhat.com> - 2.158-1
|
||||
- 2.158 bump in order to dual-live with perl 5.22
|
||||
|
||||
* Fri Sep 19 2014 Petr Pisar <ppisar@redhat.com> - 2.154-1
|
||||
- 2.154 bump (fixes CVE-2014-4330 (limit recursion when dumping deep data
|
||||
structures))
|
||||
|
||||
* Sun Sep 07 2014 Jitka Plesnikova <jplesnik@redhat.com> - 2.151-311
|
||||
- Perl 5.20 re-rebuild of bootstrapped packages
|
||||
|
||||
* Wed Sep 03 2014 Jitka Plesnikova <jplesnik@redhat.com> - 2.151-310
|
||||
- Increase release to favour standalone package
|
||||
|
||||
* Tue Aug 26 2014 Jitka Plesnikova <jplesnik@redhat.com> - 2.151-4
|
||||
- Perl 5.20 rebuild
|
||||
|
||||
* Sun Aug 17 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.151-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
|
||||
|
||||
* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.151-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
|
||||
|
||||
* Mon Mar 10 2014 Petr Pisar <ppisar@redhat.com> - 2.151-1
|
||||
- 2.151 bump
|
||||
|
||||
* Wed Aug 14 2013 Jitka Plesnikova <jplesnik@redhat.com> - 2.145-292
|
||||
- Perl 5.18 re-rebuild of bootstrapped packages
|
||||
|
||||
* Sat Aug 03 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.145-291
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
|
||||
|
||||
* Mon Jul 15 2013 Petr Pisar <ppisar@redhat.com> - 2.145-290
|
||||
- Increase release to favour standalone package
|
||||
|
||||
* Fri Jul 12 2013 Petr Pisar <ppisar@redhat.com> - 2.145-2
|
||||
- Perl 5.18 rebuild
|
||||
|
||||
* Mon Mar 18 2013 Petr Pisar <ppisar@redhat.com> - 2.145-1
|
||||
- 2.145 bump
|
||||
|
||||
* Thu Feb 28 2013 Petr Pisar <ppisar@redhat.com> - 2.143-1
|
||||
- 2.143 bump
|
||||
|
||||
* Thu Feb 14 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.139-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
|
||||
|
||||
* Wed Dec 12 2012 Petr Pisar <ppisar@redhat.com> - 2.139-1
|
||||
- 2.139 bump
|
||||
|
||||
* Fri Oct 05 2012 Petr Pisar <ppisar@redhat.com> - 2.136-1
|
||||
- 2.136 bump
|
||||
|
||||
* Fri Aug 24 2012 Petr Pisar <ppisar@redhat.com> - 2.135.07-241
|
||||
- Disable tests on bootstrap
|
||||
|
||||
* Mon Aug 13 2012 Marcela Mašláňová <mmaslano@redhat.com> - 2.135.07-240
|
||||
- update the version to override the module from perl.srpm
|
||||
- bump release to override sub-package from perl.spec
|
||||
|
||||
* Fri Jul 20 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.131-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
|
||||
|
||||
* Wed Jun 06 2012 Petr Pisar <ppisar@redhat.com> - 2.131-2
|
||||
- Perl 5.16 rebuild
|
||||
|
||||
* Tue Apr 10 2012 Petr Pisar <ppisar@redhat.com> 2.131-1
|
||||
- Specfile autogenerated by cpanspec 1.78.
|
Loading…
Reference in new issue