Compare commits
17 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
e0ac4c27df | ||
|
14be133a78 | ||
|
b52633ec79 | ||
|
b36e139f61 | ||
|
e313732da7 | ||
|
2b649ba73f | ||
|
e614c4c0dd | ||
|
f2a5d85988 | ||
|
057e5879a4 | ||
|
9ddf9accf9 | ||
|
c62da7f21d | ||
|
e16868896d | ||
|
54f1640984 | ||
|
0a8deb9fc8 | ||
|
ba0c761b02 | ||
|
126ad9fb2f | ||
|
86fcb5e476 |
1
.fmf/version
Normal file
1
.fmf/version
Normal file
@ -0,0 +1 @@
|
|||||||
|
1
|
4
.gitignore
vendored
4
.gitignore
vendored
@ -9,3 +9,7 @@
|
|||||||
/Data-Dumper-2.161.tar.gz
|
/Data-Dumper-2.161.tar.gz
|
||||||
/Data-Dumper-2.172.tar.gz
|
/Data-Dumper-2.172.tar.gz
|
||||||
/Data-Dumper-2.173.tar.gz
|
/Data-Dumper-2.173.tar.gz
|
||||||
|
/Data-Dumper-2.180.tar.gz
|
||||||
|
/Data-Dumper-2.181.tar.gz
|
||||||
|
/Data-Dumper-2.182.tar.gz
|
||||||
|
/Data-Dumper-2.183.tar.gz
|
||||||
|
@ -1,167 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
274
Data-Dumper-2.183-Upgrade-to-2.184.patch
Normal file
274
Data-Dumper-2.183-Upgrade-to-2.184.patch
Normal file
@ -0,0 +1,274 @@
|
|||||||
|
From d3b09ae0076981fb5ef8a979fa387105278a7234 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jitka Plesnikova <jplesnik@redhat.com>
|
||||||
|
Date: Wed, 11 May 2022 11:01:46 +0200
|
||||||
|
Subject: [PATCH] Upgrade to 2.184
|
||||||
|
|
||||||
|
---
|
||||||
|
Dumper.pm | 51 +++++++++++++++++++--------------------------------
|
||||||
|
Dumper.xs | 10 ++++------
|
||||||
|
t/dumper.t | 52 ++++++++++++++++------------------------------------
|
||||||
|
3 files changed, 39 insertions(+), 74 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/Dumper.pm b/Dumper.pm
|
||||||
|
index 3b1bb75..ba61ffe 100644
|
||||||
|
--- a/Dumper.pm
|
||||||
|
+++ b/Dumper.pm
|
||||||
|
@@ -29,7 +29,7 @@ our ( $Indent, $Trailingcomma, $Purity, $Pad, $Varname, $Useqq, $Terse, $Freezer
|
||||||
|
our ( @ISA, @EXPORT, @EXPORT_OK, $VERSION );
|
||||||
|
|
||||||
|
BEGIN {
|
||||||
|
- $VERSION = '2.183'; # Don't forget to set version and release
|
||||||
|
+ $VERSION = '2.184'; # Don't forget to set version and release
|
||||||
|
# date in POD below!
|
||||||
|
|
||||||
|
@ISA = qw(Exporter);
|
||||||
|
@@ -740,15 +740,15 @@ my %esc = (
|
||||||
|
"\e" => "\\e",
|
||||||
|
);
|
||||||
|
|
||||||
|
-my $low_controls = ($IS_ASCII)
|
||||||
|
-
|
||||||
|
- # This includes \177, because traditionally it has been
|
||||||
|
- # output as octal, even though it isn't really a "low"
|
||||||
|
- # control
|
||||||
|
- ? qr/[\0-\x1f\177]/
|
||||||
|
-
|
||||||
|
- # EBCDIC low controls.
|
||||||
|
- : qr/[\0-\x3f]/;
|
||||||
|
+# The low controls are considered to be everything below SPACE, plus the
|
||||||
|
+# outlier \c? control (but that wasn't properly in existence in early perls,
|
||||||
|
+# so reconstruct its value here. This abandons EBCDIC support for this
|
||||||
|
+# character for perls below 5.8)
|
||||||
|
+my $low_controls = join "", map { quotemeta chr $_ } 0.. (ord(" ") - 1);
|
||||||
|
+$low_controls .= ($] < 5.008 || $IS_ASCII)
|
||||||
|
+ ? "\x7f"
|
||||||
|
+ : chr utf8::unicode_to_native(0x9F);
|
||||||
|
+my $low_controls_re = qr/[$low_controls]/;
|
||||||
|
|
||||||
|
# put a string value in double quotes
|
||||||
|
sub qquote {
|
||||||
|
@@ -758,19 +758,10 @@ sub qquote {
|
||||||
|
# This efficiently changes the high ordinal characters to \x{} if the utf8
|
||||||
|
# flag is on. On ASCII platforms, the high ordinals are all the
|
||||||
|
# non-ASCII's. On EBCDIC platforms, we don't include in these the non-ASCII
|
||||||
|
- # controls whose ordinals are less than SPACE, excluded below by the range
|
||||||
|
- # \0-\x3f. On ASCII platforms this range just compiles as part of :ascii:.
|
||||||
|
- # On EBCDIC platforms, there is just one outlier high ordinal control, and
|
||||||
|
- # it gets output as \x{}.
|
||||||
|
+ # controls.
|
||||||
|
my $bytes; { use bytes; $bytes = length }
|
||||||
|
- s/([^[:ascii:]\0-\x3f])/sprintf("\\x{%x}",ord($1))/ge
|
||||||
|
- if $bytes > length
|
||||||
|
-
|
||||||
|
- # The above doesn't get the EBCDIC outlier high ordinal control when
|
||||||
|
- # the string is UTF-8 but there are no UTF-8 variant characters in it.
|
||||||
|
- # We want that to come out as \x{} anyway. We need is_utf8() to do
|
||||||
|
- # this.
|
||||||
|
- || (! $IS_ASCII && utf8::is_utf8($_));
|
||||||
|
+ s/([^[:ascii:]$low_controls])/sprintf("\\x{%x}",ord($1))/ge
|
||||||
|
+ if $bytes > length;
|
||||||
|
|
||||||
|
return qq("$_") unless /[[:^print:]]/; # fast exit if only printables
|
||||||
|
|
||||||
|
@@ -779,21 +770,17 @@ sub qquote {
|
||||||
|
s/([\a\b\t\n\f\r\e])/$esc{$1}/g;
|
||||||
|
|
||||||
|
# no need for 3 digits in escape for octals not followed by a digit.
|
||||||
|
- s/($low_controls)(?!\d)/'\\'.sprintf('%o',ord($1))/eg;
|
||||||
|
+ s/($low_controls_re)(?!\d)/'\\'.sprintf('%o',ord($1))/eg;
|
||||||
|
|
||||||
|
# But otherwise use 3 digits
|
||||||
|
- s/($low_controls)/'\\'.sprintf('%03o',ord($1))/eg;
|
||||||
|
+ s/($low_controls_re)/'\\'.sprintf('%03o',ord($1))/eg;
|
||||||
|
|
||||||
|
# all but last branch below not supported --BEHAVIOR SUBJECT TO CHANGE--
|
||||||
|
my $high = shift || "";
|
||||||
|
if ($high eq "iso8859") { # Doesn't escape the Latin1 printables
|
||||||
|
- if ($IS_ASCII) {
|
||||||
|
- s/([\200-\240])/'\\'.sprintf('%o',ord($1))/eg;
|
||||||
|
- }
|
||||||
|
- else {
|
||||||
|
- my $high_control = utf8::unicode_to_native(0x9F);
|
||||||
|
- s/$high_control/sprintf('\\%o',ord($1))/eg;
|
||||||
|
- }
|
||||||
|
+ # Could use /u and [:cntrl:] etc, if khw were confident it worked in
|
||||||
|
+ # early early perls
|
||||||
|
+ s/([\200-\240])/'\\'.sprintf('%o',ord($1))/eg if $IS_ASCII;
|
||||||
|
} elsif ($high eq "utf8") {
|
||||||
|
# Some discussion of what to do here is in
|
||||||
|
# https://rt.perl.org/Ticket/Display.html?id=113088
|
||||||
|
@@ -1461,7 +1448,7 @@ modify it under the same terms as Perl itself.
|
||||||
|
|
||||||
|
=head1 VERSION
|
||||||
|
|
||||||
|
-Version 2.183
|
||||||
|
+Version 2.184
|
||||||
|
|
||||||
|
=head1 SEE ALSO
|
||||||
|
|
||||||
|
diff --git a/Dumper.xs b/Dumper.xs
|
||||||
|
index 0eaa6c9..8bd6397 100644
|
||||||
|
--- a/Dumper.xs
|
||||||
|
+++ b/Dumper.xs
|
||||||
|
@@ -287,14 +287,13 @@ esc_q_utf8(pTHX_ SV* sv, const char *src, STRLEN slen, I32 do_utf8, I32 useqq)
|
||||||
|
* outputs the raw char */
|
||||||
|
normal++;
|
||||||
|
}
|
||||||
|
- else { /* Is qq, low ordinal, non-printable. Output escape
|
||||||
|
- * sequences */
|
||||||
|
+ else { /* Is qq, non-printable. Output escape sequences */
|
||||||
|
if ( k == '\a' || k == '\b' || k == '\t' || k == '\n' || k == '\r'
|
||||||
|
|| k == '\f' || k == ESC_NATIVE)
|
||||||
|
{
|
||||||
|
grow += 2; /* 1 char plus backslash */
|
||||||
|
}
|
||||||
|
- else /* The other low ordinals are output as an octal escape
|
||||||
|
+ else /* The other non-printable controls are output as an octal escape
|
||||||
|
* sequence */
|
||||||
|
if (s + 1 >= send || isDIGIT(*(s+1))) {
|
||||||
|
/* When the following character is a digit, use 3 octal digits
|
||||||
|
@@ -341,9 +340,8 @@ esc_q_utf8(pTHX_ SV* sv, const char *src, STRLEN slen, I32 do_utf8, I32 useqq)
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Here 1) isn't UTF-8; or
|
||||||
|
- * 2) the current character is ASCII; or
|
||||||
|
- * 3) it is an EBCDIC platform and is a low ordinal
|
||||||
|
- * non-ASCII control.
|
||||||
|
+ * 2) the current character is represented as the same single
|
||||||
|
+ * byte regardless of the string's UTF-8ness
|
||||||
|
* In each case the character occupies just one byte */
|
||||||
|
k = *(U8*)s;
|
||||||
|
increment = 1;
|
||||||
|
diff --git a/t/dumper.t b/t/dumper.t
|
||||||
|
index 3cd86a6..80b2c8e 100644
|
||||||
|
--- a/t/dumper.t
|
||||||
|
+++ b/t/dumper.t
|
||||||
|
@@ -77,8 +77,8 @@ sub convert_to_native {
|
||||||
|
$index = utf8::unicode_to_native(ord eval "\"$2\"");
|
||||||
|
|
||||||
|
# But low hex numbers are always in octal. These are all
|
||||||
|
- # controls.
|
||||||
|
- my $format = ($index < ord(" "))
|
||||||
|
+ # controls. The outlier \c? control is also in octal.
|
||||||
|
+ my $format = ($index < ord(" ") || $index == ord("\c?"))
|
||||||
|
? "\\%o"
|
||||||
|
: "\\x{%x}";
|
||||||
|
$replacement = sprintf($format, $index);
|
||||||
|
@@ -1659,8 +1659,8 @@ EOW
|
||||||
|
# "\\x{41f}",
|
||||||
|
# qr/\x{8b80}/,
|
||||||
|
# qr/\x{41f}/,
|
||||||
|
-# qr/\x{e4}/,
|
||||||
|
-# '\xE4'
|
||||||
|
+# qr/\x{b6}/,
|
||||||
|
+# '\xb6'
|
||||||
|
#];
|
||||||
|
EOW
|
||||||
|
if ($] lt '5.010001') {
|
||||||
|
@@ -1671,9 +1671,9 @@ EOW
|
||||||
|
$want =~ s{/(,?)$}{/u$1}mg;
|
||||||
|
}
|
||||||
|
my $want_xs = $want;
|
||||||
|
- $want_xs =~ s/'\xE4'/"\\x{e4}"/;
|
||||||
|
- $want_xs =~ s<([^\0-\177])> <sprintf '\\x{%x}', ord $1>ge;
|
||||||
|
- TEST_BOTH(qq(Data::Dumper->Dumpxs([ [qq/\x{41f}/, qr/\x{8b80}/, qr/\x{41f}/, qr/\x{e4}/, "\xE4"] ])),
|
||||||
|
+ $want_xs =~ s/'\xb6'/"\\x{b6}"/;
|
||||||
|
+ $want_xs =~ s<([[:^ascii:]])> <sprintf '\\x{%x}', ord $1>ge;
|
||||||
|
+ TEST_BOTH(qq(Data::Dumper->Dumpxs([ [qq/\x{41f}/, qr/\x{8b80}/, qr/\x{41f}/, qr/\x{b6}/, "\xb6"] ])),
|
||||||
|
"string with Unicode + regexp with Unicode",
|
||||||
|
$want, $want_xs);
|
||||||
|
}
|
||||||
|
@@ -1715,7 +1715,7 @@ EOW
|
||||||
|
# qr/ \x{203d}\\/ /,
|
||||||
|
# qr/ \\\x{203d}\\/ /,
|
||||||
|
# qr/ \\\x{203d}$bs:\\/ /,
|
||||||
|
-# '\xA3'
|
||||||
|
+# '\xB6'
|
||||||
|
#];
|
||||||
|
EOW
|
||||||
|
if ($] lt '5.010001') {
|
||||||
|
@@ -1726,9 +1726,9 @@ EOW
|
||||||
|
$want =~ s{/(,?)$}{/u$1}mg;
|
||||||
|
}
|
||||||
|
my $want_xs = $want;
|
||||||
|
- $want_xs =~ s/'\x{A3}'/"\\x{a3}"/;
|
||||||
|
+ $want_xs =~ s/'\x{B6}'/"\\x{b6}"/;
|
||||||
|
$want_xs =~ s/\x{203D}/\\x{203d}/g;
|
||||||
|
- TEST_BOTH(qq(Data::Dumper->Dumpxs([ [ '\x{2e18}', qr! \x{203d}/ !, qr! \\\x{203d}/ !, qr! \\\x{203d}$bs:/ !, "\xa3"] ])),
|
||||||
|
+ TEST_BOTH(qq(Data::Dumper->Dumpxs([ [ '\x{2e18}', qr! \x{203d}/ !, qr! \\\x{203d}/ !, qr! \\\x{203d}$bs:/ !, "\xb6"] ])),
|
||||||
|
"github #18614, github #18764, perl #58608 corner cases",
|
||||||
|
$want, $want_xs);
|
||||||
|
}
|
||||||
|
@@ -1743,13 +1743,13 @@ EOW
|
||||||
|
# qr/^\$/,
|
||||||
|
# qr/${dollar}foo/,
|
||||||
|
# qr/\\\$foo/,
|
||||||
|
-# qr/$dollar \x{A3} /u,
|
||||||
|
+# qr/$dollar \x{B6} /u,
|
||||||
|
# qr/$dollar \x{203d} /u,
|
||||||
|
# qr/\\\$ \x{203d} /u,
|
||||||
|
# qr/\\\\$dollar \x{203d} /u,
|
||||||
|
# qr/ \$| \x{203d} /u,
|
||||||
|
# qr/ (\$) \x{203d} /u,
|
||||||
|
-# '\xA3'
|
||||||
|
+# '\xB6'
|
||||||
|
#];
|
||||||
|
EOW
|
||||||
|
if ($] lt '5.014') {
|
||||||
|
@@ -1760,8 +1760,8 @@ EOW
|
||||||
|
$want =~ s!/,!)/,!g;
|
||||||
|
}
|
||||||
|
my $want_xs = $want;
|
||||||
|
- $want_xs =~ s/'\x{A3}'/"\\x{a3}"/;
|
||||||
|
- $want_xs =~ s/\x{A3}/\\x{a3}/;
|
||||||
|
+ $want_xs =~ s/'\x{B6}'/"\\x{b6}"/;
|
||||||
|
+ $want_xs =~ s/\x{B6}/\\x{b6}/;
|
||||||
|
$want_xs =~ s/\x{203D}/\\x{203d}/g;
|
||||||
|
my $have = <<"EOT";
|
||||||
|
Data::Dumper->Dumpxs([ [
|
||||||
|
@@ -1770,13 +1770,13 @@ Data::Dumper->Dumpxs([ [
|
||||||
|
qr'^\$',
|
||||||
|
qr'\$foo',
|
||||||
|
qr/\\\$foo/,
|
||||||
|
- qr'\$ \x{A3} ',
|
||||||
|
+ qr'\$ \x{B6} ',
|
||||||
|
qr'\$ \x{203d} ',
|
||||||
|
qr/\\\$ \x{203d} /,
|
||||||
|
qr'\\\\\$ \x{203d} ',
|
||||||
|
qr/ \$| \x{203d} /,
|
||||||
|
qr/ (\$) \x{203d} /,
|
||||||
|
- '\xA3'
|
||||||
|
+ '\xB6'
|
||||||
|
] ]);
|
||||||
|
EOT
|
||||||
|
TEST_BOTH($have, "CPAN #84569", $want, $want_xs);
|
||||||
|
@@ -1808,26 +1808,6 @@ EOW
|
||||||
|
"name of code in *foo",
|
||||||
|
$want);
|
||||||
|
}
|
||||||
|
-#############
|
||||||
|
-
|
||||||
|
-{
|
||||||
|
- # There is special code to handle the single control that in EBCDIC is
|
||||||
|
- # not in the block with all the other controls, when it is UTF-8 and
|
||||||
|
- # there are no variants in it (All controls in EBCDIC are invariant.)
|
||||||
|
- # This tests that. There is no harm in testing this works on ASCII,
|
||||||
|
- # and is better to not have split code paths.
|
||||||
|
- my $outlier = chr utf8::unicode_to_native(0x9F);
|
||||||
|
- my $outlier_hex = sprintf "%x", ord $outlier;
|
||||||
|
- my $want = <<EOT;
|
||||||
|
-#\$VAR1 = \"\\x{$outlier_hex}\";
|
||||||
|
-EOT
|
||||||
|
- $foo = "$outlier\x{100}";
|
||||||
|
- chop $foo;
|
||||||
|
- local $Data::Dumper::Useqq = 1;
|
||||||
|
- TEST_BOTH (q(Data::Dumper::DumperX($foo)),
|
||||||
|
- 'EBCDIC outlier control: DumperX',
|
||||||
|
- $want);
|
||||||
|
-}
|
||||||
|
############# [perl #124091]
|
||||||
|
{
|
||||||
|
my $want = <<'EOT';
|
||||||
|
--
|
||||||
|
2.34.3
|
||||||
|
|
7
gating.yaml
Normal file
7
gating.yaml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
--- !Policy
|
||||||
|
product_versions:
|
||||||
|
- fedora-*
|
||||||
|
decision_context: bodhi_update_push_stable
|
||||||
|
subject_type: koji_build
|
||||||
|
rules:
|
||||||
|
- !PassingTestCaseRule {test_case_name: fedora-ci.koji-build.tier0.functional}
|
@ -1,15 +1,15 @@
|
|||||||
%global base_version 2.173
|
%global base_version 2.183
|
||||||
|
|
||||||
Name: perl-Data-Dumper
|
Name: perl-Data-Dumper
|
||||||
Version: 2.174
|
Version: 2.184
|
||||||
Release: 457%{?dist}
|
Release: 490%{?dist}
|
||||||
Summary: Stringify perl data structures, suitable for printing and eval
|
Summary: Stringify perl data structures, suitable for printing and eval
|
||||||
License: GPL+ or Artistic
|
License: GPL+ or Artistic
|
||||||
URL: https://metacpan.org/release/Data-Dumper
|
URL: https://metacpan.org/release/Data-Dumper
|
||||||
Source0: https://cpan.metacpan.org/authors/id/X/XS/XSAWYERX/Data-Dumper-%{base_version}.tar.gz
|
Source0: https://cpan.metacpan.org/authors/id/N/NW/NWCLARK/Data-Dumper-%{base_version}.tar.gz
|
||||||
# Fix a memory leak when croaking about a too deep recursion,
|
# Upgrade to 2.184 based on perl-5.35.11
|
||||||
# fixed in perl after 5.29.9
|
Patch0: Data-Dumper-2.183-Upgrade-to-2.184.patch
|
||||||
Patch0: Data-Dumper-2.173-Data-Dumper-avoid-leak-on-croak.patch
|
BuildRequires: coreutils
|
||||||
BuildRequires: findutils
|
BuildRequires: findutils
|
||||||
BuildRequires: gcc
|
BuildRequires: gcc
|
||||||
BuildRequires: make
|
BuildRequires: make
|
||||||
@ -19,6 +19,7 @@ BuildRequires: perl-interpreter
|
|||||||
BuildRequires: perl(ExtUtils::MakeMaker) >= 6.76
|
BuildRequires: perl(ExtUtils::MakeMaker) >= 6.76
|
||||||
BuildRequires: perl(File::Copy)
|
BuildRequires: perl(File::Copy)
|
||||||
BuildRequires: perl(strict)
|
BuildRequires: perl(strict)
|
||||||
|
BuildRequires: perl(warnings)
|
||||||
# perl-Test-Simple is in cycle with perl-Data-Dumper
|
# perl-Test-Simple is in cycle with perl-Data-Dumper
|
||||||
%if !%{defined perl_bootstrap}
|
%if !%{defined perl_bootstrap}
|
||||||
# Run-time:
|
# Run-time:
|
||||||
@ -37,7 +38,6 @@ BuildRequires: perl(overload)
|
|||||||
BuildRequires: perl(strict)
|
BuildRequires: perl(strict)
|
||||||
BuildRequires: perl(Test::More) >= 0.98
|
BuildRequires: perl(Test::More) >= 0.98
|
||||||
BuildRequires: perl(vars)
|
BuildRequires: perl(vars)
|
||||||
BuildRequires: perl(warnings)
|
|
||||||
# Optional tests:
|
# Optional tests:
|
||||||
BuildRequires: perl(Encode)
|
BuildRequires: perl(Encode)
|
||||||
%endif
|
%endif
|
||||||
@ -49,27 +49,57 @@ Requires: perl(XSLoader)
|
|||||||
|
|
||||||
%{?perl_default_filter}
|
%{?perl_default_filter}
|
||||||
|
|
||||||
|
# Filter modules bundled for tests
|
||||||
|
%global __provides_exclude_from %{?__provides_exclude_from:%__provides_exclude_from|}^%{_libexecdir}
|
||||||
|
%global __requires_exclude %{?__requires_exclude:%__requires_exclude|}perl\\(Testing\\)
|
||||||
|
|
||||||
%description
|
%description
|
||||||
Given a list of scalars or reference variables, writes out their contents
|
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
|
in perl syntax. The references can also be objects. The content of each
|
||||||
variable is output in a single Perl statement. Handles self-referential
|
variable is output in a single Perl statement. Handles self-referential
|
||||||
structures correctly.
|
structures correctly.
|
||||||
|
|
||||||
|
%package tests
|
||||||
|
Summary: Tests for %{name}
|
||||||
|
Requires: %{name} = %{?epoch:%{epoch}:}%{version}-%{release}
|
||||||
|
Requires: perl(Encode)
|
||||||
|
Requires: perl-Test-Harness
|
||||||
|
|
||||||
|
%description tests
|
||||||
|
Tests from %{name}. Execute them
|
||||||
|
with "%{_libexecdir}/%{name}/test".
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -n Data-Dumper-%{base_version}
|
%setup -q -n Data-Dumper-%{base_version}
|
||||||
%patch0 -p1
|
%patch0 -p1
|
||||||
|
|
||||||
|
# Help file to recognise the Perl scripts
|
||||||
|
for F in t/*.t; do
|
||||||
|
perl -i -MConfig -ple 'print $Config{startperl} if $. == 1 && !s{\A#!.*perl\b}{$Config{startperl}}' "$F"
|
||||||
|
chmod +x "$F"
|
||||||
|
done
|
||||||
|
|
||||||
%build
|
%build
|
||||||
perl Makefile.PL INSTALLDIRS=vendor NO_PACKLIST=1 NO_PERLLOCAL=1 OPTIMIZE="$RPM_OPT_FLAGS"
|
perl Makefile.PL INSTALLDIRS=vendor NO_PACKLIST=1 NO_PERLLOCAL=1 OPTIMIZE="$RPM_OPT_FLAGS"
|
||||||
%{make_build}
|
%{make_build}
|
||||||
|
|
||||||
%install
|
%install
|
||||||
%{make_install}
|
%{make_install}
|
||||||
find $RPM_BUILD_ROOT -type f -name '*.bs' -size 0 -delete
|
find %{buildroot} -type f -name '*.bs' -size 0 -delete
|
||||||
%{_fixperms} $RPM_BUILD_ROOT/*
|
%{_fixperms} %{buildroot}/*
|
||||||
|
|
||||||
|
# Install tests
|
||||||
|
mkdir -p %{buildroot}%{_libexecdir}/%{name}
|
||||||
|
cp -a t %{buildroot}%{_libexecdir}/%{name}
|
||||||
|
cat > %{buildroot}%{_libexecdir}/%{name}/test << 'EOF'
|
||||||
|
#!/bin/sh
|
||||||
|
cd %{_libexecdir}/%{name} && exec prove -I . -j "$(getconf _NPROCESSORS_ONLN)"
|
||||||
|
EOF
|
||||||
|
chmod +x %{buildroot}%{_libexecdir}/%{name}/test
|
||||||
|
|
||||||
%check
|
%check
|
||||||
%if !%{defined perl_bootstrap}
|
%if !%{defined perl_bootstrap}
|
||||||
|
export HARNESS_OPTIONS=j$(perl -e 'if ($ARGV[0] =~ /.*-j([0-9][0-9]*).*/) {print $1} else {print 1}' -- '%{?_smp_mflags}')
|
||||||
make test
|
make test
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
@ -79,7 +109,59 @@ make test
|
|||||||
%{perl_vendorarch}/Data*
|
%{perl_vendorarch}/Data*
|
||||||
%{_mandir}/man3/*
|
%{_mandir}/man3/*
|
||||||
|
|
||||||
|
%files tests
|
||||||
|
%{_libexecdir}/%{name}
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Jul 22 2022 Fedora Release Engineering <releng@fedoraproject.org> - 2.184-490
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
|
||||||
|
|
||||||
|
* Fri Jun 03 2022 Jitka Plesnikova <jplesnik@redhat.com> - 2.184-489
|
||||||
|
- Perl 5.36 re-rebuild of bootstrapped packages
|
||||||
|
|
||||||
|
* Mon May 30 2022 Jitka Plesnikova <jplesnik@redhat.com> - 2.184-488
|
||||||
|
- Increase release to favour standalone package
|
||||||
|
|
||||||
|
* Wed May 11 2022 Jitka Plesnikova <jplesnik@redhat.com> - 2.184-1
|
||||||
|
- Upgrade to 2.184 based on perl-5.35.11
|
||||||
|
|
||||||
|
* Fri Jan 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 2.183-3
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
|
||||||
|
|
||||||
|
* Thu Jul 22 2021 Fedora Release Engineering <releng@fedoraproject.org> - 2.183-2
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
|
||||||
|
|
||||||
|
* Thu Jul 08 2021 Jitka Plesnikova <jplesnik@redhat.com> - 2.183-1
|
||||||
|
- 2.183 bump
|
||||||
|
|
||||||
|
* Thu Jul 01 2021 Jitka Plesnikova <jplesnik@redhat.com> - 2.182-1
|
||||||
|
- 2.182 bump
|
||||||
|
|
||||||
|
* Mon May 31 2021 Jitka Plesnikova <jplesnik@redhat.com> - 2.181-1
|
||||||
|
- 2.181 bump
|
||||||
|
|
||||||
|
* Mon May 24 2021 Jitka Plesnikova <jplesnik@redhat.com> - 2.180-4
|
||||||
|
- Perl 5.34 re-rebuild of bootstrapped packages
|
||||||
|
|
||||||
|
* Mon May 24 2021 Jitka Plesnikova <jplesnik@redhat.com> - 2.180-3
|
||||||
|
- Perl 5.34 re-rebuild of bootstrapped packages
|
||||||
|
|
||||||
|
* Fri May 21 2021 Jitka Plesnikova <jplesnik@redhat.com> - 2.180-2
|
||||||
|
- Perl 5.34 rebuild
|
||||||
|
|
||||||
|
* Mon May 17 2021 Jitka Plesnikova <jplesnik@redhat.com> - 2.180-1
|
||||||
|
- 2.180 bump
|
||||||
|
- Package tests
|
||||||
|
|
||||||
|
* 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
|
* Fri Jun 26 2020 Jitka Plesnikova <jplesnik@redhat.com> - 2.174-457
|
||||||
- Perl 5.32 re-rebuild of bootstrapped packages
|
- Perl 5.32 re-rebuild of bootstrapped packages
|
||||||
|
|
||||||
|
5
plans/sanity.fmf
Normal file
5
plans/sanity.fmf
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
summary: Sanity tests
|
||||||
|
discover:
|
||||||
|
how: fmf
|
||||||
|
execute:
|
||||||
|
how: tmt
|
2
sources
2
sources
@ -1 +1 @@
|
|||||||
SHA512 (Data-Dumper-2.173.tar.gz) = a8d45fdce075bfe8752d423d535cc5279c012c733b0219884204119c9365e93c971858331e74c20df7beaa9b24ad54e1bf9eeb8d8bff53cf21fb88889d7602c2
|
SHA512 (Data-Dumper-2.183.tar.gz) = b78ff820b9e4a873c69a2097dbe2d7eaeccfab0af4d5d262281a500d42d75abc28943fe671a203a715e31568164da7b6d33825b92ebc92f99e8242efd1e7f65b
|
||||||
|
4
tests/upstream-tests.fmf
Normal file
4
tests/upstream-tests.fmf
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
summary: Upstream tests
|
||||||
|
component: perl-Data-Dumper
|
||||||
|
require: perl-Data-Dumper-tests
|
||||||
|
test: /usr/libexec/perl-Data-Dumper/test
|
Loading…
Reference in New Issue
Block a user