From 20fdaca4712fc74fe3ea859ea81a183af35d1f92 Mon Sep 17 00:00:00 2001 From: Jitka Plesnikova Date: Mon, 22 Jun 2020 11:08:28 +0200 Subject: [PATCH] Upgrade to 3.21 as provided in perl-5.32.0 --- Storable-3.15-Upgrade-to-3.21.patch | 476 ++++++++++++++++++++++++++++ perl-Storable.spec | 17 +- 2 files changed, 488 insertions(+), 5 deletions(-) create mode 100644 Storable-3.15-Upgrade-to-3.21.patch diff --git a/Storable-3.15-Upgrade-to-3.21.patch b/Storable-3.15-Upgrade-to-3.21.patch new file mode 100644 index 0000000..4cdf10f --- /dev/null +++ b/Storable-3.15-Upgrade-to-3.21.patch @@ -0,0 +1,476 @@ +From 0452589669aed9ad06940de7c1620b340608868a Mon Sep 17 00:00:00 2001 +From: Jitka Plesnikova +Date: Mon, 1 Jun 2020 12:58:11 +0200 +Subject: [PATCH] Upgrade to 3.21 + +--- + ChangeLog | 33 ++++++++++++++++++- + MANIFEST | 3 +- + Makefile.PL | 59 +++++++++++++--------------------- + __Storable__.pm => Storable.pm | 23 +++++++------ + Storable.pm.PL | 35 -------------------- + Storable.xs | 20 ++++++++---- + stacksize | 2 +- + t/attach_errors.t | 2 +- + t/huge.t | 4 +-- + t/recurse.t | 4 +-- + t/regexp.t | 8 ++--- + 11 files changed, 93 insertions(+), 100 deletions(-) + rename __Storable__.pm => Storable.pm (99%) + delete mode 100644 Storable.pm.PL + +diff --git a/ChangeLog b/ChangeLog +index 0488199..bf35381 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,34 @@ ++2010-01-27 10:27:00 TonyC ++ version 3.20 ++ * fix a format string and arguments for some debugging text ++ * linkify references to alternatives to Storable ++ ++2020-01-27 11:01:00 TonyC ++ version 3.19 ++ * add casts to match some I32 parameters to "%d" formats (#17339) ++ * fix dependencies in Makefile.PL -> META (#17422) ++ * make use of note() optional, this requires a newer version of ++ Test::More and there's a circular dependency between later ++ versions of Test::More and Storable (#17422) ++ ++2019-11-19 07:59:39 TonyC ++ version 3.18 ++ * update bug tracker to point at github (#17298) ++ * disallow vstring magic strings over 2GB-1 (#17306) ++ * mark some ASCII dependent tests as ASCII platform only ++ ++2019-08-08 11:48:00 TonyC ++ version 3.17 ++ * correct a data type to ensure the check for too large results from ++ STORABLE_freeze() are detected correctly (detected by Coverity) ++ * removed remains of stack size detection from the build process. ++ * moved CAN_FLOCK detection into XS to simplify the build process. ++ ++2019-06-11 10:43:00 TonyC ++ version 3.16 ++ * (perl #134179) fix self-referencing structures that include regexps ++ * bless regexps to preserve bless qr//, "Foo" ++ + 2019-04-23 16:00:00 xsawyerx + version 3.15 + * Fix leaking. +@@ -341,7 +372,7 @@ Sat Mar 13 20:11:03 GMT 2004 Nicholas Clark + Version 2.11 + + 1. Storing restricted hashes in canonical order would SEGV. Fixed. +- 2. It was impossible to retrieve references to PL_sv_no and and ++ 2. It was impossible to retrieve references to PL_sv_no and + PL_sv_undef from STORABLE_thaw hooks. + 3. restrict.t was failing on 5.8.0, due to 5.8.0's unique + implementation of restricted hashes using PL_sv_undef +diff --git a/MANIFEST b/MANIFEST +index d30b94e..5e382d9 100644 +--- a/MANIFEST ++++ b/MANIFEST +@@ -1,4 +1,3 @@ +-__Storable__.pm + ChangeLog + hints/gnukfreebsd.pl + hints/gnuknetbsd.pl +@@ -11,7 +10,7 @@ META.yml Module meta-data (added by MakeMaker) + ppport.h + README + stacksize +-Storable.pm.PL ++Storable.pm + Storable.xs + t/attach.t + t/attach_errors.t +diff --git a/Makefile.PL b/Makefile.PL +index 4a39125..e03e141 100644 +--- a/Makefile.PL ++++ b/Makefile.PL +@@ -10,43 +10,48 @@ use strict; + use warnings; + use ExtUtils::MakeMaker 6.31; + use Config; +-use File::Copy qw(move copy); +-use File::Spec; +- +-my $pm = { 'Storable.pm' => '$(INST_ARCHLIB)/Storable.pm' }; + + WriteMakefile( + NAME => 'Storable', + AUTHOR => 'Perl 5 Porters', + LICENSE => 'perl', + DISTNAME => "Storable", +-# We now ship this in t/ +-# PREREQ_PM => { 'Test::More' => '0.41' }, +- PL_FILES => { }, # prevent default behaviour +- PM => $pm, +- PREREQ_PM => { XSLoader => 0 }, ++ PREREQ_PM => ++ { ++ XSLoader => 0, ++ }, ++ ( $ExtUtils::MakeMaker::VERSION >= 6.64 ? ++ ( ++ CONFIGURE_REQUIRES => { ++ 'ExtUtils::MakeMaker' => '6.31', ++ }, ++ BUILD_REQUIRES => { ++ 'ExtUtils::MakeMaker' => '6.31', ++ }, ++ TEST_REQUIRES => { ++ 'Test::More' => '0.41', ++ }, ++ ) ++ : () ), + INSTALLDIRS => ($] >= 5.007 && $] < 5.012) ? 'perl' : 'site', +- VERSION_FROM => '__Storable__.pm', +- ABSTRACT_FROM => '__Storable__.pm', ++ VERSION_FROM => 'Storable.pm', ++ ABSTRACT_FROM => 'Storable.pm', + ($ExtUtils::MakeMaker::VERSION > 6.45 ? + (META_MERGE => { resources => +- { bugtracker => 'http://rt.perl.org/perlbug/' }, ++ { bugtracker => 'https://github.com/Perl/perl5/issues' }, + provides => { + 'Storable' => { +- file => '__Storable__.pm', +- version => MM->parse_version('__Storable__.pm'), ++ file => 'Storable.pm', ++ version => MM->parse_version('Storable.pm'), + }, + }, + + }, + ) : ()), + dist => { SUFFIX => 'gz', COMPRESS => 'gzip -f' }, +- clean => { FILES => 'Storable-* Storable.pm lib' }, ++ clean => { FILES => 'Storable-*' }, + ); + +-# Unlink the .pm file included with the distribution +-1 while unlink "Storable.pm"; +- + my $ivtype = $Config{ivtype}; + + # I don't know if the VMS folks ever supported long long on 5.6.x +@@ -67,16 +72,8 @@ in the Storable documentation for instructions on how to read your data. + EOM + } + +-# compute the maximum stacksize, before and after linking + package MY; + +-# FORCE finish of INST_DYNAMIC, avoid loading the old Storable (failed XS_VERSION check) +-sub xlinkext { +- my $s = shift->SUPER::linkext(@_); +- $s =~ s|( :: .*)| $1 FORCE stacksize|; +- $s +-} +- + sub depend { + " + +@@ -87,13 +84,3 @@ release : dist + git push --tags + " + } +- +-sub postamble { +-' +-all :: Storable.pm +- $(NOECHO) $(NOOP) +- +-Storable.pm :: Storable.pm.PL __Storable__.pm +- $(PERLRUN) Storable.pm.PL +-' +-} +diff --git a/__Storable__.pm b/Storable.pm +similarity index 99% +rename from __Storable__.pm +rename to Storable.pm +index 9237371..1a750f1 100644 +--- a/__Storable__.pm ++++ b/Storable.pm +@@ -8,7 +8,7 @@ + # in the README file that comes with the distribution. + # + +-require XSLoader; ++BEGIN { require XSLoader } + require Exporter; + package Storable; + +@@ -27,7 +27,9 @@ our @EXPORT_OK = qw( + + our ($canonical, $forgive_me); + +-our $VERSION = '3.15'; ++BEGIN { ++ our $VERSION = '3.21'; ++} + + our $recursion_limit; + our $recursion_limit_hash; +@@ -104,14 +106,12 @@ $Storable::flags = FLAGS_COMPAT; + $Storable::downgrade_restricted = 1; + $Storable::accept_future_minor = 1; + +-XSLoader::load('Storable'); ++BEGIN { XSLoader::load('Storable') }; + + # + # Determine whether locking is possible, but only when needed. + # + +-sub CAN_FLOCK; # TEMPLATE - replaced by Storable.pm.PL +- + sub show_file_magic { + print <>", $file) || logcroak "can't write into $file: $!"; +- unless (&CAN_FLOCK) { ++ unless (CAN_FLOCK) { + logcarp + "Storable::lock_store: fcntl/flock emulation broken on $^O"; + return undef; +@@ -410,7 +410,7 @@ sub _retrieve { + my $self; + my $da = $@; # Could be from exception handler + if ($use_locking) { +- unless (&CAN_FLOCK) { ++ unless (CAN_FLOCK) { + logcarp + "Storable::lock_store: fcntl/flock emulation broken on $^O"; + return undef; +@@ -986,6 +986,9 @@ modifying C<$Storable::recursion_limit> and + C<$Storable::recursion_limit_hash> respectively. Either can be set to + C<-1> to prevent any depth checks, though this isn't recommended. + ++If you want to test what the limits are, the F tool is ++included in the C distribution. ++ + =item * + + You can create endless loops if the things you serialize via freeze() +@@ -1224,9 +1227,9 @@ See CVE-2015-1592 and its metasploit module. + If your application requires accepting data from untrusted sources, + you are best off with a less powerful and more-likely safe + serialization format and implementation. If your data is sufficiently +-simple, Cpanel::JSON::XS, Data::MessagePack or Serial are the best +-choices and offers maximum interoperability, but note that Serial is +-unsafe by default. ++simple, L, L or L are the best ++choices and offer maximum interoperability, but note that Sereal is ++L. + + =head1 WARNING + +diff --git a/Storable.pm.PL b/Storable.pm.PL +deleted file mode 100644 +index df979c0..0000000 +--- a/Storable.pm.PL ++++ /dev/null +@@ -1,35 +0,0 @@ +-use strict; +-use warnings; +- +-use Config; +- +-my $template; +-{ # keep all the code in an external template to keep it easy to update +- local $/; +- open my $FROM, '<', '__Storable__.pm' or die $!; +- $template = <$FROM>; +- close $FROM or die $!; +-} +- +-sub CAN_FLOCK { +- return +- $Config{'d_flock'} || +- $Config{'d_fcntl_can_lock'} || +- $Config{'d_lockf'} +- ? 1 : 0; +-} +- +-my $CAN_FLOCK = CAN_FLOCK(); +- +-# populate the sub and preserve it if used outside +-$template =~ s{^sub CAN_FLOCK;.*$}{sub CAN_FLOCK { ${CAN_FLOCK} } # computed by Storable.pm.PL}m; +-# alternatively we could remove the sub +-#$template =~ s{^sub CAN_FLOCK;.*$}{}m; +-# replace local function calls to hardcoded value +-$template =~ s{&CAN_FLOCK}{${CAN_FLOCK}}g; +- +-{ +- open my $OUT, '>', 'Storable.pm' or die $!; +- print {$OUT} $template or die $!; +- close $OUT or die $!; +-} +diff --git a/Storable.xs b/Storable.xs +index e1f0b88..4c4c268 100644 +--- a/Storable.xs ++++ b/Storable.xs +@@ -104,6 +104,12 @@ + # define strEQc(s,c) memEQ(s, ("" c ""), sizeof(c)) + #endif + ++#if defined(HAS_FLOCK) || defined(FCNTL_CAN_LOCK) && defined(HAS_LOCKF) ++#define CAN_FLOCK &PL_sv_yes ++#else ++#define CAN_FLOCK &PL_sv_no ++#endif ++ + #ifdef DEBUGME + + #ifndef DASSERT +@@ -726,8 +732,8 @@ static stcxt_t *Context_ptr = NULL; + STRLEN nsz = (STRLEN) round_mgrow((x)+msiz); \ + STRLEN offset = mptr - mbase; \ + ASSERT(!cxt->membuf_ro, ("mbase is not read-only")); \ +- TRACEME(("** extending mbase from %ld to %ld bytes (wants %ld new)", \ +- (long)msiz, nsz, (long)(x))); \ ++ TRACEME(("** extending mbase from %lu to %lu bytes (wants %lu new)", \ ++ (unsigned long)msiz, (unsigned long)nsz, (unsigned long)(x))); \ + Renew(mbase, nsz, char); \ + msiz = nsz; \ + mptr = mbase + offset; \ +@@ -3085,7 +3091,7 @@ static int store_hash(pTHX_ stcxt_t *cxt, HV *hv) + len = HEK_LEN(hek); + if (len == HEf_SVKEY) { + /* This is somewhat sick, but the internal APIs are +- * such that XS code could put one of these in in ++ * such that XS code could put one of these in + * a regular hash. + * Maybe we should be capable of storing one if + * found. +@@ -3437,7 +3443,7 @@ static int get_regexp(pTHX_ stcxt_t *cxt, SV* sv, SV **re, SV **flags) { + count = call_sv((SV*)cv, G_ARRAY); + SPAGAIN; + if (count < 2) +- CROAK(("re::regexp_pattern returned only %d results", count)); ++ CROAK(("re::regexp_pattern returned only %d results", (int)count)); + *flags = POPs; + SvREFCNT_inc(*flags); + *re = POPs; +@@ -5952,7 +5958,7 @@ static SV *retrieve_lvstring(pTHX_ stcxt_t *cxt, const char *cname) + } + + New(10003, s, len+1, char); +- SAFEPVREAD(s, len, s); ++ SAFEPVREAD(s, (I32)len, s); + + sv = retrieve(aTHX_ cxt, cname); + if (!sv) { +@@ -6858,7 +6864,7 @@ static SV *retrieve_regexp(pTHX_ stcxt_t *cxt, const char *cname) { + SPAGAIN; + + if (count != 1) +- CROAK(("Bad count %d calling _make_re", count)); ++ CROAK(("Bad count %d calling _make_re", (int)count)); + + re_ref = POPs; + +@@ -7807,6 +7813,8 @@ BOOT: + newCONSTSUB(stash, "BIN_MINOR", newSViv(STORABLE_BIN_MINOR)); + newCONSTSUB(stash, "BIN_WRITE_MINOR", newSViv(STORABLE_BIN_WRITE_MINOR)); + ++ newCONSTSUB(stash, "CAN_FLOCK", CAN_FLOCK); ++ + init_perinterp(aTHX); + gv_fetchpv("Storable::drop_utf8", GV_ADDMULTI, SVt_PV); + #ifdef DEBUGME +diff --git a/stacksize b/stacksize +index f93eccc..2896684 100644 +--- a/stacksize ++++ b/stacksize +@@ -161,7 +161,7 @@ my $max_depth_hash = $n; + # instead so a user setting of either variable more closely matches + # the limits the use sees. + +-# be fairly aggressive in trimming this, smoke testing showed several ++# be fairly aggressive in trimming this, smoke testing showed + # several apparently random failures here, eg. working in one + # configuration, but not in a very similar configuration. + $max_depth = int(0.6 * $max_depth); +diff --git a/t/attach_errors.t b/t/attach_errors.t +index 0ed7c8d..e2be39d 100644 +--- a/t/attach_errors.t ++++ b/t/attach_errors.t +@@ -94,7 +94,7 @@ use Storable (); + # Error 2 + # + # If, for some reason, a STORABLE_attach object is accidentally stored +-# with references, this should be checked and and error should be throw. ++# with references, this should be checked and an error should be thrown. + + + +diff --git a/t/huge.t b/t/huge.t +index d28e238..09b173e 100644 +--- a/t/huge.t ++++ b/t/huge.t +@@ -63,7 +63,7 @@ if ($Config{ptrsize} > 4 and !$has_too_many) { + [ 'huge array', + sub { my @x; $x[$huge] = undef; \@x } ]; + } else { +- diag "skip huge array, need PERL_TEST_MEMORY >= 8"; ++ diag "skip huge array, need PERL_TEST_MEMORY >= 55"; + } + } + +@@ -78,7 +78,7 @@ if (!$has_too_many) { + ['huge hash', + sub { my %x = (0 .. $huge); \%x } ]; + } else { +- diag "skip huge hash, need PERL_TEST_MEMORY >= 16"; ++ diag "skip huge hash, need PERL_TEST_MEMORY >= 96"; + } + } + +diff --git a/t/recurse.t b/t/recurse.t +index b5967a0..6f82169 100644 +--- a/t/recurse.t ++++ b/t/recurse.t +@@ -347,7 +347,7 @@ sub MAX_DEPTH_HASH () { Storable::stack_depth_hash() } + eval { + my $t; + $t = [$t] for 1 .. MAX_DEPTH*2; +- note 'trying catching recursive aref stack overflow'; ++ eval { note('trying catching recursive aref stack overflow') }; + dclone $t; + }; + like $@, qr/Max\. recursion depth with nested structures exceeded/, +@@ -362,7 +362,7 @@ else { + my $t; + # 35.000 will cause appveyor 64bit windows to fail earlier + $t = {1=>$t} for 1 .. MAX_DEPTH * 2; +- note 'trying catching recursive href stack overflow'; ++ eval { note('trying catching recursive href stack overflow') }; + dclone $t; + }; + like $@, qr/Max\. recursion depth with nested structures exceeded/, +diff --git a/t/regexp.t b/t/regexp.t +index e7c6c7e..6c6b1d5 100644 +--- a/t/regexp.t ++++ b/t/regexp.t +@@ -123,7 +123,7 @@ __DATA__ + A-; qr(\x2E) ; ".", !"a" ; \x2E - hex meta + -; qr/\./ ; "." , !"a" ; \. - backslash meta + 8- ; qr/\x{100}/ ; "\x{100}" ; simple unicode +-12- ; qr/fss/i ; "f\xDF\x{101}" ; case insensive unicode promoted +-22-; qr/fss/ui ; "f\xDF" ; case insensitive unicode SS /iu +-22-; qr/fss/aai ; !"f\xDF" ; case insensitive unicode SS /iaa +-22-; qr/f\w/a ; "fo", !"f\xff" ; simple /a flag ++A12- ; qr/fss/i ; "f\xDF\x{101}" ; case insensive unicode promoted ++A22-; qr/fss/ui ; "f\xDF" ; case insensitive unicode SS /iu ++A22-; qr/fss/aai ; !"f\xDF" ; case insensitive unicode SS /iaa ++A22-; qr/f\w/a ; "fo", !"f\xff" ; simple /a flag +-- +2.25.4 + diff --git a/perl-Storable.spec b/perl-Storable.spec index e97db14..1c74c8c 100644 --- a/perl-Storable.spec +++ b/perl-Storable.spec @@ -1,12 +1,13 @@ +%global base_version 3.15 Name: perl-Storable Epoch: 1 -Version: 3.15 -Release: 443%{?dist} +Version: 3.21 +Release: 456%{?dist} Summary: Persistence for Perl data structures -# __Storable__.pm: GPL+ or Artistic +# Storable.pm: GPL+ or Artistic License: GPL+ or Artistic URL: https://metacpan.org/release/Storable -Source0: https://cpan.metacpan.org/authors/id/X/XS/XSAWYERX/Storable-%{version}.tar.gz +Source0: https://cpan.metacpan.org/authors/id/X/XS/XSAWYERX/Storable-%{base_version}.tar.gz # Fix deep cloning regular expression objects, RT#134179, # in Perl upstream after 5.31.0 Patch0: Storable-3.15-perl-134179-include-regexps-in-the-seen-objects-tabl.patch @@ -15,6 +16,8 @@ Patch1: Storable-3.16-Storable-make-count-large-enough.patch # Fix a buffer overflow when processing a vstring longer than 2^31-1, # Perl GH#17306, in perl upstream after 5.31.6 Patch2: perl-5.31.6-disallow-vstring-magic-strings-over-2GB-1.patch +# Unbundled from perl 5.32.0 +Patch3: Storable-3.15-Upgrade-to-3.21.patch BuildRequires: gcc BuildRequires: make BuildRequires: perl-devel @@ -73,10 +76,11 @@ containing scalar, array, hash or reference objects, i.e. anything that can be conveniently stored to disk and retrieved at a later time. %prep -%setup -q -n Storable-%{version} +%setup -q -n Storable-%{base_version} %patch0 -p3 %patch1 -p3 %patch2 -p3 +%patch3 -p1 %build perl Makefile.PL INSTALLDIRS=vendor NO_PACKLIST=1 NO_PERLLOCAL=1 OPTIMIZE="$RPM_OPT_FLAGS" @@ -99,6 +103,9 @@ make test %{_mandir}/man3/* %changelog +* Mon Jun 22 2020 Jitka Plesnikova - 1:3.21-456 +- Upgrade to 3.21 as provided in perl-5.32.0 + * Thu Jan 30 2020 Fedora Release Engineering - 1:3.15-443 - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild