commit
b90fec37f9
@ -0,0 +1 @@
|
|||||||
|
SOURCES/Storable-3.25.tar.gz
|
@ -0,0 +1 @@
|
|||||||
|
bf9a9fce480251283d1fb5a49c342e4a2e78662f SOURCES/Storable-3.25.tar.gz
|
@ -0,0 +1,538 @@
|
|||||||
|
From 93b4cf22054a0e3f9f5d4ae8eaec85e8ca28944c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jitka Plesnikova <jplesnik@redhat.com>
|
||||||
|
Date: Mon, 12 Jun 2023 16:00:23 +0200
|
||||||
|
Subject: [PATCH] Upgrade to 3.32
|
||||||
|
|
||||||
|
---
|
||||||
|
ChangeLog | 29 ++++++++++++++
|
||||||
|
Makefile.PL | 2 +-
|
||||||
|
Storable.pm | 30 ++++++++------
|
||||||
|
Storable.xs | 111 ++++++++++++++++++++++++++++++++++++++++++----------
|
||||||
|
t/blessed.t | 53 ++++++++++++++++++++++++-
|
||||||
|
t/boolean.t | 84 +++++++++++++++++++++++++++++++++++++++
|
||||||
|
t/malice.t | 6 +--
|
||||||
|
7 files changed, 278 insertions(+), 37 deletions(-)
|
||||||
|
create mode 100644 t/boolean.t
|
||||||
|
|
||||||
|
diff --git a/ChangeLog b/ChangeLog
|
||||||
|
index b1f4790..6619543 100644
|
||||||
|
--- a/ChangeLog
|
||||||
|
+++ b/ChangeLog
|
||||||
|
@@ -1,3 +1,32 @@
|
||||||
|
+2023-05-26 21:36:00 demerphq
|
||||||
|
+ version 3.32
|
||||||
|
+ * Update security advisory to be more clear
|
||||||
|
+
|
||||||
|
+2023-02-26 00:31:32 demerphq
|
||||||
|
+ version 3.31
|
||||||
|
+ * Fixup for ppport fix in 3.30
|
||||||
|
+
|
||||||
|
+2023-02-22 09:56:27 leont
|
||||||
|
+ version 3.30
|
||||||
|
+ * Use ppport for all modules in dist.
|
||||||
|
+
|
||||||
|
+2023-01-04 17:33:24 iabyn
|
||||||
|
+ version 3.29
|
||||||
|
+ * Store code fixes identified from refcounted stack patch
|
||||||
|
+
|
||||||
|
+2022-11-08 10:12:46 tony
|
||||||
|
+ version 3.28
|
||||||
|
+ * Store hook error reporting improvements
|
||||||
|
+ * Store hook handles regex objects properly.
|
||||||
|
+
|
||||||
|
+2022-06-20 20:32:29 toddr
|
||||||
|
+ version 3.27
|
||||||
|
+ * Use cBOOL instead of !! in xs code
|
||||||
|
+
|
||||||
|
+2022-04-18 17:36:00 toddr
|
||||||
|
+ version 3.26
|
||||||
|
+ * Conform to ppport.h 3.68 recommendations
|
||||||
|
+
|
||||||
|
2021-08-30 07:46:52 nwclark
|
||||||
|
version 3.25
|
||||||
|
* No changes from previous version
|
||||||
|
diff --git a/Makefile.PL b/Makefile.PL
|
||||||
|
index e03e141..b705654 100644
|
||||||
|
--- a/Makefile.PL
|
||||||
|
+++ b/Makefile.PL
|
||||||
|
@@ -29,7 +29,7 @@ WriteMakefile(
|
||||||
|
'ExtUtils::MakeMaker' => '6.31',
|
||||||
|
},
|
||||||
|
TEST_REQUIRES => {
|
||||||
|
- 'Test::More' => '0.41',
|
||||||
|
+ 'Test::More' => '0.82',
|
||||||
|
},
|
||||||
|
)
|
||||||
|
: () ),
|
||||||
|
diff --git a/Storable.pm b/Storable.pm
|
||||||
|
index 8e6ab25..d531f2b 100644
|
||||||
|
--- a/Storable.pm
|
||||||
|
+++ b/Storable.pm
|
||||||
|
@@ -28,7 +28,7 @@ our @EXPORT_OK = qw(
|
||||||
|
our ($canonical, $forgive_me);
|
||||||
|
|
||||||
|
BEGIN {
|
||||||
|
- our $VERSION = '3.25';
|
||||||
|
+ our $VERSION = '3.32';
|
||||||
|
}
|
||||||
|
|
||||||
|
our $recursion_limit;
|
||||||
|
@@ -1197,11 +1197,16 @@ compartment:
|
||||||
|
|
||||||
|
=head1 SECURITY WARNING
|
||||||
|
|
||||||
|
-B<Do not accept Storable documents from untrusted sources!>
|
||||||
|
+B<Do not accept Storable documents from untrusted sources!> There is
|
||||||
|
+B<no> way to configure Storable so that it can be used safely to process
|
||||||
|
+untrusted data. While there I<are> various options that can be used to
|
||||||
|
+mitigate specific security issues these options do I<not> comprise a
|
||||||
|
+complete safety net for the user, and processing untrusted data may
|
||||||
|
+result in segmentation faults, remote code execution, or privilege
|
||||||
|
+escalation. The following lists some known features which represent
|
||||||
|
+security issues that should be considered by users of this module.
|
||||||
|
|
||||||
|
-Some features of Storable can lead to security vulnerabilities if you
|
||||||
|
-accept Storable documents from untrusted sources with the default
|
||||||
|
-flags. Most obviously, the optional (off by default) CODE reference
|
||||||
|
+Most obviously, the optional (off by default) CODE reference
|
||||||
|
serialization feature allows transfer of code to the deserializing
|
||||||
|
process. Furthermore, any serialized object will cause Storable to
|
||||||
|
helpfully load the module corresponding to the class of the object in
|
||||||
|
@@ -1224,12 +1229,15 @@ With the default setting of C<$Storable::flags> = 6, creating or destroying
|
||||||
|
random objects, even renamed objects can be controlled by an attacker.
|
||||||
|
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, L<Cpanel::JSON::XS>, L<Data::MessagePack> or L<Sereal> are the best
|
||||||
|
-choices and offer maximum interoperability, but note that Sereal is
|
||||||
|
-L<unsafe by default|Sereal::Decoder/ROBUSTNESS>.
|
||||||
|
+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,
|
||||||
|
+L<Cpanel::JSON::XS> or L<Data::MessagePack> are fine alternatives. For
|
||||||
|
+more complex data structures containing various Perl specific data types
|
||||||
|
+like regular expressions or aliased data L<Sereal> is the best
|
||||||
|
+alternative and offers maximum interoperability. Note that Sereal is
|
||||||
|
+L<unsafe by default|Sereal::Decoder/ROBUSTNESS>, but you can configure
|
||||||
|
+the encoder and decoder to mitigate any security issues.
|
||||||
|
|
||||||
|
=head1 WARNING
|
||||||
|
|
||||||
|
diff --git a/Storable.xs b/Storable.xs
|
||||||
|
index 6944b76..a558dd7 100644
|
||||||
|
--- a/Storable.xs
|
||||||
|
+++ b/Storable.xs
|
||||||
|
@@ -16,18 +16,13 @@
|
||||||
|
#include <perl.h>
|
||||||
|
#include <XSUB.h>
|
||||||
|
|
||||||
|
-#ifndef PERL_VERSION_LT
|
||||||
|
-# if !defined(PERL_VERSION) || !defined(PERL_REVISION) || ( PERL_REVISION == 5 && ( PERL_VERSION < 10 || (PERL_VERSION == 10 && PERL_SUBVERSION < 1) ) )
|
||||||
|
-# define NEED_PL_parser
|
||||||
|
-# define NEED_sv_2pv_flags
|
||||||
|
-# define NEED_load_module
|
||||||
|
-# define NEED_vload_module
|
||||||
|
-# define NEED_newCONSTSUB
|
||||||
|
-# define NEED_newSVpvn_flags
|
||||||
|
-# define NEED_newRV_noinc
|
||||||
|
-# endif
|
||||||
|
+#define NEED_sv_2pv_flags
|
||||||
|
+#define NEED_load_module
|
||||||
|
+#define NEED_vload_module
|
||||||
|
+#define NEED_newCONSTSUB
|
||||||
|
+#define NEED_newSVpvn_flags
|
||||||
|
+#define NEED_newRV_noinc
|
||||||
|
#include "ppport.h" /* handle old perls */
|
||||||
|
-#endif
|
||||||
|
|
||||||
|
#ifdef DEBUGGING
|
||||||
|
#define DEBUGME /* Debug mode, turns assertions on as well */
|
||||||
|
@@ -176,7 +171,9 @@
|
||||||
|
#define SX_SVUNDEF_ELEM C(31) /* array element set to &PL_sv_undef */
|
||||||
|
#define SX_REGEXP C(32) /* Regexp */
|
||||||
|
#define SX_LOBJECT C(33) /* Large object: string, array or hash (size >2G) */
|
||||||
|
-#define SX_LAST C(34) /* invalid. marker only */
|
||||||
|
+#define SX_BOOLEAN_TRUE C(34) /* Boolean true */
|
||||||
|
+#define SX_BOOLEAN_FALSE C(35) /* Boolean false */
|
||||||
|
+#define SX_LAST C(36) /* invalid. marker only */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Those are only used to retrieve "old" pre-0.6 binary images.
|
||||||
|
@@ -975,7 +972,7 @@ static const char byteorderstr_56[] = {BYTEORDER_BYTES_56, 0};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define STORABLE_BIN_MAJOR 2 /* Binary major "version" */
|
||||||
|
-#define STORABLE_BIN_MINOR 11 /* Binary minor "version" */
|
||||||
|
+#define STORABLE_BIN_MINOR 12 /* Binary minor "version" */
|
||||||
|
|
||||||
|
#if !defined (SvVOK)
|
||||||
|
/*
|
||||||
|
@@ -1454,6 +1451,8 @@ static const sv_retrieve_t sv_old_retrieve[] = {
|
||||||
|
(sv_retrieve_t)retrieve_other, /* SX_SVUNDEF_ELEM not supported */
|
||||||
|
(sv_retrieve_t)retrieve_other, /* SX_REGEXP */
|
||||||
|
(sv_retrieve_t)retrieve_other, /* SX_LOBJECT not supported */
|
||||||
|
+ (sv_retrieve_t)retrieve_other, /* SX_BOOLEAN_TRUE not supported */
|
||||||
|
+ (sv_retrieve_t)retrieve_other, /* SX_BOOLEAN_FALSE not supported */
|
||||||
|
(sv_retrieve_t)retrieve_other, /* SX_LAST */
|
||||||
|
};
|
||||||
|
|
||||||
|
@@ -1477,6 +1476,8 @@ static SV *retrieve_weakoverloaded(pTHX_ stcxt_t *cxt, const char *cname);
|
||||||
|
static SV *retrieve_vstring(pTHX_ stcxt_t *cxt, const char *cname);
|
||||||
|
static SV *retrieve_lvstring(pTHX_ stcxt_t *cxt, const char *cname);
|
||||||
|
static SV *retrieve_svundef_elem(pTHX_ stcxt_t *cxt, const char *cname);
|
||||||
|
+static SV *retrieve_boolean_true(pTHX_ stcxt_t *cxt, const char *cname);
|
||||||
|
+static SV *retrieve_boolean_false(pTHX_ stcxt_t *cxt, const char *cname);
|
||||||
|
|
||||||
|
static const sv_retrieve_t sv_retrieve[] = {
|
||||||
|
0, /* SX_OBJECT -- entry unused dynamically */
|
||||||
|
@@ -1513,6 +1514,8 @@ static const sv_retrieve_t sv_retrieve[] = {
|
||||||
|
(sv_retrieve_t)retrieve_svundef_elem,/* SX_SVUNDEF_ELEM */
|
||||||
|
(sv_retrieve_t)retrieve_regexp, /* SX_REGEXP */
|
||||||
|
(sv_retrieve_t)retrieve_lobject, /* SX_LOBJECT */
|
||||||
|
+ (sv_retrieve_t)retrieve_boolean_true, /* SX_BOOLEAN_TRUE */
|
||||||
|
+ (sv_retrieve_t)retrieve_boolean_false, /* SX_BOOLEAN_FALSE */
|
||||||
|
(sv_retrieve_t)retrieve_other, /* SX_LAST */
|
||||||
|
};
|
||||||
|
|
||||||
|
@@ -2187,7 +2190,7 @@ static AV *array_call(pTHX_
|
||||||
|
XPUSHs(sv_2mortal(newSViv(cloning))); /* Cloning flag */
|
||||||
|
PUTBACK;
|
||||||
|
|
||||||
|
- count = call_sv(hook, G_ARRAY); /* Go back to Perl code */
|
||||||
|
+ count = call_sv(hook, G_LIST); /* Go back to Perl code */
|
||||||
|
|
||||||
|
SPAGAIN;
|
||||||
|
|
||||||
|
@@ -2454,6 +2457,16 @@ static int store_scalar(pTHX_ stcxt_t *cxt, SV *sv)
|
||||||
|
pv = SvPV(sv, len); /* We know it's SvPOK */
|
||||||
|
goto string; /* Share code below */
|
||||||
|
}
|
||||||
|
+#ifdef SvIsBOOL
|
||||||
|
+ } else if (SvIsBOOL(sv)) {
|
||||||
|
+ TRACEME(("mortal boolean"));
|
||||||
|
+ if (SvTRUE_nomg_NN(sv)) {
|
||||||
|
+ PUTMARK(SX_BOOLEAN_TRUE);
|
||||||
|
+ }
|
||||||
|
+ else {
|
||||||
|
+ PUTMARK(SX_BOOLEAN_FALSE);
|
||||||
|
+ }
|
||||||
|
+#endif
|
||||||
|
} else if (flags & SVf_POK) {
|
||||||
|
/* public string - go direct to string read. */
|
||||||
|
goto string_readlen;
|
||||||
|
@@ -3250,6 +3263,7 @@ static int store_code(pTHX_ stcxt_t *cxt, CV *cv)
|
||||||
|
CROAK(("Unexpected return value from B::Deparse::coderef2text\n"));
|
||||||
|
|
||||||
|
text = POPs;
|
||||||
|
+ PUTBACK;
|
||||||
|
len = SvCUR(text);
|
||||||
|
reallen = strlen(SvPV_nolen(text));
|
||||||
|
|
||||||
|
@@ -3318,7 +3332,7 @@ static int get_regexp(pTHX_ stcxt_t *cxt, SV* sv, SV **re, SV **flags) {
|
||||||
|
XPUSHs(rv);
|
||||||
|
PUTBACK;
|
||||||
|
/* optimize to call the XS directly later */
|
||||||
|
- count = call_sv((SV*)cv, G_ARRAY);
|
||||||
|
+ count = call_sv((SV*)cv, G_LIST);
|
||||||
|
SPAGAIN;
|
||||||
|
if (count < 2)
|
||||||
|
CROAK(("re::regexp_pattern returned only %d results", (int)count));
|
||||||
|
@@ -3567,7 +3581,10 @@ static int store_hook(
|
||||||
|
int need_large_oids = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
- TRACEME(("store_hook, classname \"%s\", tagged #%d", HvNAME_get(pkg), (int)cxt->tagnum));
|
||||||
|
+ classname = HvNAME_get(pkg);
|
||||||
|
+ len = strlen(classname);
|
||||||
|
+
|
||||||
|
+ TRACEME(("store_hook, classname \"%s\", tagged #%d", classname, (int)cxt->tagnum));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Determine object type on 2 bits.
|
||||||
|
@@ -3576,6 +3593,7 @@ static int store_hook(
|
||||||
|
switch (type) {
|
||||||
|
case svis_REF:
|
||||||
|
case svis_SCALAR:
|
||||||
|
+ case svis_REGEXP:
|
||||||
|
obj_type = SHT_SCALAR;
|
||||||
|
break;
|
||||||
|
case svis_ARRAY:
|
||||||
|
@@ -3615,13 +3633,20 @@ static int store_hook(
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
- CROAK(("Unexpected object type (%d) in store_hook()", type));
|
||||||
|
+ {
|
||||||
|
+ /* pkg_can() always returns a ref to a CV on success */
|
||||||
|
+ CV *cv = (CV*)SvRV(hook);
|
||||||
|
+ const GV * const gv = CvGV(cv);
|
||||||
|
+ const char *gvname = GvNAME(gv);
|
||||||
|
+ const HV * const stash = GvSTASH(gv);
|
||||||
|
+ const char *hvname = stash ? HvNAME(stash) : NULL;
|
||||||
|
+
|
||||||
|
+ CROAK(("Unexpected object type (%s) of class '%s' in store_hook() calling %s::%s",
|
||||||
|
+ sv_reftype(sv, FALSE), classname, hvname, gvname));
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
flags = SHF_NEED_RECURSE | obj_type;
|
||||||
|
|
||||||
|
- classname = HvNAME_get(pkg);
|
||||||
|
- len = strlen(classname);
|
||||||
|
-
|
||||||
|
/*
|
||||||
|
* To call the hook, we need to fake a call like:
|
||||||
|
*
|
||||||
|
@@ -5882,6 +5907,50 @@ static SV *retrieve_integer(pTHX_ stcxt_t *cxt, const char *cname)
|
||||||
|
return sv;
|
||||||
|
}
|
||||||
|
|
||||||
|
+/*
|
||||||
|
+ * retrieve_boolean_true
|
||||||
|
+ *
|
||||||
|
+ * Retrieve boolean true copy.
|
||||||
|
+ */
|
||||||
|
+static SV *retrieve_boolean_true(pTHX_ stcxt_t *cxt, const char *cname)
|
||||||
|
+{
|
||||||
|
+ SV *sv;
|
||||||
|
+ HV *stash;
|
||||||
|
+
|
||||||
|
+ TRACEME(("retrieve_boolean_true (#%d)", (int)cxt->tagnum));
|
||||||
|
+
|
||||||
|
+ sv = newSVsv(&PL_sv_yes);
|
||||||
|
+ stash = cname ? gv_stashpv(cname, GV_ADD) : 0;
|
||||||
|
+ SEEN_NN(sv, stash, 0); /* Associate this new scalar with tag "tagnum" */
|
||||||
|
+
|
||||||
|
+ TRACEME(("boolean true"));
|
||||||
|
+ TRACEME(("ok (retrieve_boolean_true at 0x%" UVxf ")", PTR2UV(sv)));
|
||||||
|
+
|
||||||
|
+ return sv;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+/*
|
||||||
|
+ * retrieve_boolean_false
|
||||||
|
+ *
|
||||||
|
+ * Retrieve boolean false copy.
|
||||||
|
+ */
|
||||||
|
+static SV *retrieve_boolean_false(pTHX_ stcxt_t *cxt, const char *cname)
|
||||||
|
+{
|
||||||
|
+ SV *sv;
|
||||||
|
+ HV *stash;
|
||||||
|
+
|
||||||
|
+ TRACEME(("retrieve_boolean_false (#%d)", (int)cxt->tagnum));
|
||||||
|
+
|
||||||
|
+ sv = newSVsv(&PL_sv_no);
|
||||||
|
+ stash = cname ? gv_stashpv(cname, GV_ADD) : 0;
|
||||||
|
+ SEEN_NN(sv, stash, 0); /* Associate this new scalar with tag "tagnum" */
|
||||||
|
+
|
||||||
|
+ TRACEME(("boolean false"));
|
||||||
|
+ TRACEME(("ok (retrieve_boolean_false at 0x%" UVxf ")", PTR2UV(sv)));
|
||||||
|
+
|
||||||
|
+ return sv;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* retrieve_lobject
|
||||||
|
*
|
||||||
|
@@ -7774,7 +7843,7 @@ CODE:
|
||||||
|
assert(cxt);
|
||||||
|
result = cxt->entry && (cxt->optype & ix) ? TRUE : FALSE;
|
||||||
|
} else {
|
||||||
|
- result = !!last_op_in_netorder(aTHX);
|
||||||
|
+ result = cBOOL(last_op_in_netorder(aTHX));
|
||||||
|
}
|
||||||
|
ST(0) = boolSV(result);
|
||||||
|
|
||||||
|
diff --git a/t/blessed.t b/t/blessed.t
|
||||||
|
index d9a77b3..dea569b 100644
|
||||||
|
--- a/t/blessed.t
|
||||||
|
+++ b/t/blessed.t
|
||||||
|
@@ -44,7 +44,7 @@ use Storable qw(freeze thaw store retrieve fd_retrieve);
|
||||||
|
'long VSTRING' => \(my $lvstring = eval "v" . 0 x 300),
|
||||||
|
LVALUE => \(my $substr = substr((my $str = "foo"), 0, 3)));
|
||||||
|
|
||||||
|
-my $test = 13;
|
||||||
|
+my $test = 18;
|
||||||
|
my $tests = $test + 41 + (2 * 6 * keys %::immortals) + (3 * keys %::weird_refs);
|
||||||
|
plan(tests => $tests);
|
||||||
|
|
||||||
|
@@ -414,3 +414,54 @@ is(ref $t, 'STRESS_THE_STACK');
|
||||||
|
|
||||||
|
unlink("store$$");
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+{
|
||||||
|
+ # trying to freeze a glob via STORABLE_freeze
|
||||||
|
+ {
|
||||||
|
+ package GlobHookedBase;
|
||||||
|
+
|
||||||
|
+ sub STORABLE_freeze {
|
||||||
|
+ return \1;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ package GlobHooked;
|
||||||
|
+ our @ISA = "GlobHookedBase";
|
||||||
|
+ }
|
||||||
|
+ use Symbol ();
|
||||||
|
+ my $glob = bless Symbol::gensym(), "GlobHooked";
|
||||||
|
+ eval {
|
||||||
|
+ my $data = freeze($glob);
|
||||||
|
+ };
|
||||||
|
+ my $msg = $@;
|
||||||
|
+ like($msg, qr/Unexpected object type \(GLOB\) of class 'GlobHooked' in store_hook\(\) calling GlobHookedBase::STORABLE_freeze/,
|
||||||
|
+ "check we get the verbose message");
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+SKIP:
|
||||||
|
+{
|
||||||
|
+ $] < 5.012
|
||||||
|
+ and skip "Can't assign regexps directly before 5.12", 4;
|
||||||
|
+ my $hook_called;
|
||||||
|
+ # store regexp via hook
|
||||||
|
+ {
|
||||||
|
+ package RegexpHooked;
|
||||||
|
+ sub STORABLE_freeze {
|
||||||
|
+ ++$hook_called;
|
||||||
|
+ "$_[0]";
|
||||||
|
+ }
|
||||||
|
+ sub STORABLE_thaw {
|
||||||
|
+ my ($obj, $cloning, $serialized) = @_;
|
||||||
|
+ ++$hook_called;
|
||||||
|
+ $$obj = ${ qr/$serialized/ };
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ my $obj = bless qr/abc/, "RegexpHooked";
|
||||||
|
+ my $data = freeze($obj);
|
||||||
|
+ ok($data, "froze regexp blessed into hooked class");
|
||||||
|
+ ok($hook_called, "and the hook was actually called");
|
||||||
|
+ $hook_called = 0;
|
||||||
|
+ my $obj_thawed = thaw($data);
|
||||||
|
+ ok($hook_called, "hook called for thaw");
|
||||||
|
+ like("abc", $obj_thawed, "check the regexp");
|
||||||
|
+}
|
||||||
|
diff --git a/t/boolean.t b/t/boolean.t
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..9ba19c0
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/t/boolean.t
|
||||||
|
@@ -0,0 +1,84 @@
|
||||||
|
+use strict;
|
||||||
|
+use warnings;
|
||||||
|
+
|
||||||
|
+my $true_ref;
|
||||||
|
+my $false_ref;
|
||||||
|
+BEGIN {
|
||||||
|
+ $true_ref = \!!1;
|
||||||
|
+ $false_ref = \!!0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+BEGIN {
|
||||||
|
+ unshift @INC, 't';
|
||||||
|
+ unshift @INC, 't/compat' if $] < 5.006002;
|
||||||
|
+ require Config;
|
||||||
|
+ if ($ENV{PERL_CORE} and $Config::Config{'extensions'} !~ /\bStorable\b/) {
|
||||||
|
+ print "1..0 # Skip: Storable was not built\n";
|
||||||
|
+ exit 0;
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+use Test::More tests => 12;
|
||||||
|
+use Storable qw(thaw freeze);
|
||||||
|
+
|
||||||
|
+use constant CORE_BOOLS => defined &builtin::is_bool;
|
||||||
|
+
|
||||||
|
+{
|
||||||
|
+ my $x = $true_ref;
|
||||||
|
+ my $y = ${thaw freeze \$x};
|
||||||
|
+ is($y, $x);
|
||||||
|
+ eval {
|
||||||
|
+ $$y = 2;
|
||||||
|
+ };
|
||||||
|
+ isnt $@, '',
|
||||||
|
+ 'immortal true maintained as immortal';
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+{
|
||||||
|
+ my $x = $false_ref;
|
||||||
|
+ my $y = ${thaw freeze \$x};
|
||||||
|
+ is($y, $x);
|
||||||
|
+ eval {
|
||||||
|
+ $$y = 2;
|
||||||
|
+ };
|
||||||
|
+ isnt $@, '',
|
||||||
|
+ 'immortal false maintained as immortal';
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+{
|
||||||
|
+ my $true = $$true_ref;
|
||||||
|
+ my $x = \$true;
|
||||||
|
+ my $y = ${thaw freeze \$x};
|
||||||
|
+ is($$y, $$x);
|
||||||
|
+ is($$y, '1');
|
||||||
|
+ SKIP: {
|
||||||
|
+ skip "perl $] does not support tracking boolean values", 1
|
||||||
|
+ unless CORE_BOOLS;
|
||||||
|
+ BEGIN { CORE_BOOLS and warnings->unimport('experimental::builtin') }
|
||||||
|
+ ok builtin::is_bool($$y);
|
||||||
|
+ }
|
||||||
|
+ eval {
|
||||||
|
+ $$y = 2;
|
||||||
|
+ };
|
||||||
|
+ is $@, '',
|
||||||
|
+ 'mortal true maintained as mortal';
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+{
|
||||||
|
+ my $false = $$false_ref;
|
||||||
|
+ my $x = \$false;
|
||||||
|
+ my $y = ${thaw freeze \$x};
|
||||||
|
+ is($$y, $$x);
|
||||||
|
+ is($$y, '');
|
||||||
|
+ SKIP: {
|
||||||
|
+ skip "perl $] does not support tracking boolean values", 1
|
||||||
|
+ unless CORE_BOOLS;
|
||||||
|
+ BEGIN { CORE_BOOLS and warnings->unimport('experimental::builtin') }
|
||||||
|
+ ok builtin::is_bool($$y);
|
||||||
|
+ }
|
||||||
|
+ eval {
|
||||||
|
+ $$y = 2;
|
||||||
|
+ };
|
||||||
|
+ is $@, '',
|
||||||
|
+ 'mortal true maintained as mortal';
|
||||||
|
+}
|
||||||
|
diff --git a/t/malice.t b/t/malice.t
|
||||||
|
index 8adae95..7b92d3d 100644
|
||||||
|
--- a/t/malice.t
|
||||||
|
+++ b/t/malice.t
|
||||||
|
@@ -32,7 +32,7 @@ our $file_magic_str = 'pst0';
|
||||||
|
our $other_magic = 7 + length $byteorder;
|
||||||
|
our $network_magic = 2;
|
||||||
|
our $major = 2;
|
||||||
|
-our $minor = 11;
|
||||||
|
+our $minor = 12;
|
||||||
|
our $minor_write = $] >= 5.019 ? 11 : $] > 5.008 ? 9 : $] > 5.005_50 ? 8 : 4;
|
||||||
|
|
||||||
|
use Test::More;
|
||||||
|
@@ -206,7 +206,7 @@ sub test_things {
|
||||||
|
$where = $file_magic + $network_magic;
|
||||||
|
}
|
||||||
|
|
||||||
|
- # Just the header and a tag 255. As 33 is currently the highest tag, this
|
||||||
|
+ # Just the header and a tag 255. As 34 is currently the highest tag, this
|
||||||
|
# is "unexpected"
|
||||||
|
$copy = substr ($contents, 0, $where) . chr 255;
|
||||||
|
|
||||||
|
@@ -226,7 +226,7 @@ sub test_things {
|
||||||
|
# local $Storable::DEBUGME = 1;
|
||||||
|
# This is the delayed croak
|
||||||
|
test_corrupt ($copy, $sub,
|
||||||
|
- "/^Storable binary image v$header->{major}.$minor6 contains data of type 255. This Storable is v$header->{major}.$minor and can only handle data types up to 33/",
|
||||||
|
+ "/^Storable binary image v$header->{major}.$minor6 contains data of type 255. This Storable is v$header->{major}.$minor and can only handle data types up to 35/",
|
||||||
|
"bogus tag, minor plus 4");
|
||||||
|
# And check again that this croak is not delayed:
|
||||||
|
{
|
||||||
|
--
|
||||||
|
2.40.1
|
||||||
|
|
@ -0,0 +1,320 @@
|
|||||||
|
%global base_version 3.25
|
||||||
|
Name: perl-Storable
|
||||||
|
Epoch: 1
|
||||||
|
Version: 3.32
|
||||||
|
Release: 510%{?dist}
|
||||||
|
Summary: Persistence for Perl data structures
|
||||||
|
# Storable.pm: GPL+ or Artistic
|
||||||
|
License: GPL-1.0-or-later OR Artistic-1.0-Perl
|
||||||
|
URL: https://metacpan.org/release/Storable
|
||||||
|
Source0: https://cpan.metacpan.org/authors/id/N/NW/NWCLARK/Storable-%{base_version}.tar.gz
|
||||||
|
# Unbundled from perl 5.37.12
|
||||||
|
Patch0: Storable-3.25-Upgrade-to-3.32.patch
|
||||||
|
BuildRequires: coreutils
|
||||||
|
BuildRequires: gcc
|
||||||
|
BuildRequires: make
|
||||||
|
BuildRequires: perl-devel
|
||||||
|
BuildRequires: perl-generators
|
||||||
|
BuildRequires: perl-interpreter
|
||||||
|
BuildRequires: perl(Config)
|
||||||
|
BuildRequires: perl(Cwd)
|
||||||
|
BuildRequires: perl(ExtUtils::MakeMaker) >= 6.76
|
||||||
|
BuildRequires: perl(File::Copy)
|
||||||
|
BuildRequires: perl(File::Spec) >= 0.8
|
||||||
|
BuildRequires: perl(strict)
|
||||||
|
BuildRequires: perl(warnings)
|
||||||
|
# Win32 not used on Linux
|
||||||
|
# Win32API::File not used on Linux
|
||||||
|
# Run-time:
|
||||||
|
BuildRequires: perl(Carp)
|
||||||
|
BuildRequires: perl(Exporter)
|
||||||
|
# Fcntl is optional, but locking is good
|
||||||
|
BuildRequires: perl(Fcntl)
|
||||||
|
BuildRequires: perl(IO::File)
|
||||||
|
# Log::Agent is optional
|
||||||
|
BuildRequires: perl(XSLoader)
|
||||||
|
# Tests:
|
||||||
|
BuildRequires: perl(base)
|
||||||
|
BuildRequires: perl(bytes)
|
||||||
|
BuildRequires: perl(constant)
|
||||||
|
BuildRequires: perl(File::Temp)
|
||||||
|
BuildRequires: perl(integer)
|
||||||
|
BuildRequires: perl(overload)
|
||||||
|
BuildRequires: perl(utf8)
|
||||||
|
BuildRequires: perl(Test::More)
|
||||||
|
BuildRequires: perl(threads)
|
||||||
|
BuildRequires: perl(Safe)
|
||||||
|
BuildRequires: perl(Scalar::Util)
|
||||||
|
BuildRequires: perl(Symbol)
|
||||||
|
BuildRequires: perl(Tie::Array)
|
||||||
|
# Optional tests:
|
||||||
|
# gzip not used
|
||||||
|
# Data::Dump not used
|
||||||
|
# Data::Dumper not used
|
||||||
|
BuildRequires: perl(B::Deparse) >= 0.61
|
||||||
|
BuildRequires: perl(Digest::MD5)
|
||||||
|
BuildRequires: perl(Hash::Util)
|
||||||
|
# Test::LeakTrace omitted because it's not a core module requried for building
|
||||||
|
# core Storable.
|
||||||
|
BuildRequires: perl(Tie::Hash)
|
||||||
|
Requires: perl(Config)
|
||||||
|
# Fcntl is optional, but locking is good
|
||||||
|
Requires: perl(Fcntl)
|
||||||
|
Requires: perl(IO::File)
|
||||||
|
|
||||||
|
%{?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\\(HAS_OVERLOAD\\)
|
||||||
|
%global __requires_exclude %{__requires_exclude}|^perl\\(testlib.pl\\)
|
||||||
|
|
||||||
|
%description
|
||||||
|
The Storable package brings persistence to your Perl data structures
|
||||||
|
containing scalar, array, hash or reference objects, i.e. anything that
|
||||||
|
can be conveniently stored to disk and retrieved at a later time.
|
||||||
|
|
||||||
|
%package tests
|
||||||
|
Summary: Tests for %{name}
|
||||||
|
Requires: %{name} = %{?epoch:%{epoch}:}%{version}-%{release}
|
||||||
|
Requires: perl-Test-Harness
|
||||||
|
Requires: perl(B::Deparse) >= 0.61
|
||||||
|
Requires: perl(Digest::MD5)
|
||||||
|
|
||||||
|
%description tests
|
||||||
|
Tests from %{name}. Execute them
|
||||||
|
with "%{_libexecdir}/%{name}/test".
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%autosetup -p1 -n Storable-%{base_version}
|
||||||
|
|
||||||
|
# Help generators to recognize Perl scripts
|
||||||
|
for F in t/*.t t/*.pl; do
|
||||||
|
perl -i -MConfig -ple 'print $Config{startperl} if $. == 1 && !s{\A#!.*perl\b}{$Config{startperl}}' "$F"
|
||||||
|
chmod +x "$F"
|
||||||
|
done
|
||||||
|
|
||||||
|
%build
|
||||||
|
perl Makefile.PL INSTALLDIRS=vendor NO_PACKLIST=1 NO_PERLLOCAL=1 OPTIMIZE="%{optflags}"
|
||||||
|
%{make_build}
|
||||||
|
|
||||||
|
%install
|
||||||
|
%{make_install}
|
||||||
|
find %{buildroot} -type f -name '*.bs' -size 0 -delete
|
||||||
|
find %{buildroot} -type f -name '*.3pm' -size 0 -delete
|
||||||
|
%{_fixperms} %{buildroot}/*
|
||||||
|
|
||||||
|
# Install tests
|
||||||
|
mkdir -p %{buildroot}/%{_libexecdir}/%{name}
|
||||||
|
cp -a t %{buildroot}/%{_libexecdir}/%{name}
|
||||||
|
cat > %{buildroot}/%{_libexecdir}/%{name}/test << 'EOF'
|
||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
# Some tests write into temporary files/directories. The easiest solution
|
||||||
|
# is to copy the tests into a writable directory and execute them from there.
|
||||||
|
DIR=$(mktemp -d)
|
||||||
|
pushd "$DIR"
|
||||||
|
cp -a %{_libexecdir}/%{name}/* ./
|
||||||
|
prove -I . -j "$(getconf _NPROCESSORS_ONLN)"
|
||||||
|
popd
|
||||||
|
rm -rf "$DIR"
|
||||||
|
EOF
|
||||||
|
chmod +x %{buildroot}/%{_libexecdir}/%{name}/test
|
||||||
|
|
||||||
|
%check
|
||||||
|
export HARNESS_OPTIONS=j$(perl -e 'if ($ARGV[0] =~ /.*-j([0-9][0-9]*).*/) {print $1} else {print 1}' -- '%{?_smp_mflags}')
|
||||||
|
unset PERL_CORE PERL_TEST_MEMORY PERL_RUN_SLOW_TESTS
|
||||||
|
make test
|
||||||
|
|
||||||
|
%files
|
||||||
|
%doc ChangeLog README
|
||||||
|
%{perl_vendorarch}/auto/*
|
||||||
|
%{perl_vendorarch}/Storable*
|
||||||
|
%{_mandir}/man3/Storable*
|
||||||
|
|
||||||
|
%files tests
|
||||||
|
%{_libexecdir}/%{name}
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* Thu Jul 18 2024 Jitka Plesnikova <jplesnik@redhat.com> - 1:3.32-510
|
||||||
|
- Increase release to favour standalone package
|
||||||
|
|
||||||
|
* Mon Jun 24 2024 Troy Dawson <tdawson@redhat.com> - 1:3.32-503
|
||||||
|
- Bump release for June 2024 mass rebuild
|
||||||
|
|
||||||
|
* Thu Jan 25 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1:3.32-502
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
|
||||||
|
|
||||||
|
* Sun Jan 21 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1:3.32-501
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
|
||||||
|
|
||||||
|
* Fri Jul 21 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1:3.32-500
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
|
||||||
|
|
||||||
|
* Tue Jul 11 2023 Jitka Plesnikova <jplesnik@redhat.com> - 1:3.32-499
|
||||||
|
- Increase release to favour standalone package
|
||||||
|
|
||||||
|
* Mon Jun 12 2023 Jitka Plesnikova <jplesnik@redhat.com> - 1:3.32-1
|
||||||
|
- Upgrade to 3.32 as provided in perl-5.37.12
|
||||||
|
|
||||||
|
* Thu May 18 2023 Jitka Plesnikova <jplesnik@redhat.com> - 1:3.31-1
|
||||||
|
- Upgrade to 3.31 as provided in perl-5.37.11
|
||||||
|
|
||||||
|
* Fri Jan 20 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1:3.26-490
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
|
||||||
|
|
||||||
|
* Fri Jul 22 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1:3.26-489
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
|
||||||
|
|
||||||
|
* Mon May 30 2022 Jitka Plesnikova <jplesnik@redhat.com> - 1:3.26-488
|
||||||
|
- Upgrade to 3.26 as provided in perl-5.35.11
|
||||||
|
|
||||||
|
* Fri Jan 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1:3.25-2
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
|
||||||
|
|
||||||
|
* Mon Aug 30 2021 Jitka Plesnikova <jplesnik@redhat.com> - 1:3.25-1
|
||||||
|
- 3.25 bump
|
||||||
|
- Package tests
|
||||||
|
|
||||||
|
* Thu Jul 22 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1:3.23-478
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
|
||||||
|
|
||||||
|
* Fri May 21 2021 Jitka Plesnikova <jplesnik@redhat.com> - 1:3.23-477
|
||||||
|
- Upgrade to 3.23 as provided in perl-5.34.0
|
||||||
|
|
||||||
|
* Wed Jan 27 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1:3.21-458
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
|
||||||
|
|
||||||
|
* Tue Jul 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1:3.21-457
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
|
||||||
|
|
||||||
|
* Mon Jun 22 2020 Jitka Plesnikova <jplesnik@redhat.com> - 1:3.21-456
|
||||||
|
- Upgrade to 3.21 as provided in perl-5.32.0
|
||||||
|
|
||||||
|
* Thu Jan 30 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1:3.15-443
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
|
||||||
|
|
||||||
|
* Mon Nov 25 2019 Petr Pisar <ppisar@redhat.com> - 1:3.15-442
|
||||||
|
- Fix a buffer overflow when processing a vstring longer than 2^31-1
|
||||||
|
(Perl GH#17306)
|
||||||
|
|
||||||
|
* Thu Aug 08 2019 Petr Pisar <ppisar@redhat.com> - 1:3.15-441
|
||||||
|
- Fix array length check in a store hook
|
||||||
|
|
||||||
|
* Fri Jul 26 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1:3.15-440
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
|
||||||
|
|
||||||
|
* Tue Jun 11 2019 Petr Pisar <ppisar@redhat.com> - 1:3.15-439
|
||||||
|
- Fix deep cloning regular expression objects (RT#134179)
|
||||||
|
|
||||||
|
* Thu May 30 2019 Jitka Plesnikova <jplesnik@redhat.com> - 1:3.15-438
|
||||||
|
- Increase release to favour standalone package
|
||||||
|
|
||||||
|
* Wed Apr 24 2019 Petr Pisar <ppisar@redhat.com> - 1:3.15-1
|
||||||
|
- 3.15 bump
|
||||||
|
|
||||||
|
* Sat Feb 02 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1:3.11-7
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
|
||||||
|
|
||||||
|
* Mon Jan 07 2019 Petr Pisar <ppisar@redhat.com> - 1:3.11-6
|
||||||
|
- Storable-3.11 source archive repackaged without a t/CVE-2015-1592.inc file
|
||||||
|
(RT#133706)
|
||||||
|
|
||||||
|
* Mon Aug 27 2018 Petr Pisar <ppisar@redhat.com> - 1:3.11-5
|
||||||
|
- Fix recursion check (RT#133326)
|
||||||
|
|
||||||
|
* Fri Jul 13 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1:3.11-4
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
|
||||||
|
|
||||||
|
* Tue Jun 26 2018 Jitka Plesnikova <jplesnik@redhat.com> - 1:3.11-3
|
||||||
|
- Perl 5.28 rebuild
|
||||||
|
|
||||||
|
* Tue Jun 05 2018 Petr Pisar <ppisar@redhat.com> - 1:3.11-2
|
||||||
|
- Do not package empty Storable::Limit(3pm) manual page
|
||||||
|
|
||||||
|
* Mon Apr 30 2018 Petr Pisar <ppisar@redhat.com> - 1:3.11-1
|
||||||
|
- 3.11 bump
|
||||||
|
|
||||||
|
* Mon Apr 23 2018 Petr Pisar <ppisar@redhat.com> - 1:3.09-1
|
||||||
|
- 3.09 bump
|
||||||
|
|
||||||
|
* Thu Apr 19 2018 Petr Pisar <ppisar@redhat.com> - 1:3.06-1
|
||||||
|
- 3.06 bump
|
||||||
|
|
||||||
|
* Fri Feb 09 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1:2.62-396
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
|
||||||
|
|
||||||
|
* Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1:2.62-395
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
|
||||||
|
|
||||||
|
* Thu Jul 27 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1:2.62-394
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
|
||||||
|
|
||||||
|
* Sat Jun 03 2017 Jitka Plesnikova <jplesnik@redhat.com> - 1:2.62-393
|
||||||
|
- Perl 5.26 rebuild
|
||||||
|
|
||||||
|
* Thu May 11 2017 Petr Pisar <ppisar@redhat.com> - 1:2.62-1
|
||||||
|
- Upgrade to 2.62 as provided in perl-5.25.12
|
||||||
|
|
||||||
|
* Mon Feb 06 2017 Petr Pisar <ppisar@redhat.com> - 1:2.56-368
|
||||||
|
- Fix a stack buffer overflow in deserialization of hooks (RT#130635)
|
||||||
|
- Fix a memory leak of a class name from retrieve_hook() on an exception
|
||||||
|
(RT#130635)
|
||||||
|
|
||||||
|
* Tue Dec 20 2016 Petr Pisar <ppisar@redhat.com> - 1:2.56-367
|
||||||
|
- Fix crash in Storable when deserializing malformed code reference
|
||||||
|
(RT#68348, RT#130098)
|
||||||
|
|
||||||
|
* Wed Aug 03 2016 Jitka Plesnikova <jplesnik@redhat.com> - 1:2.56-366
|
||||||
|
- Avoid loading optional modules from default . (CVE-2016-1238)
|
||||||
|
|
||||||
|
* Sat May 14 2016 Jitka Plesnikova <jplesnik@redhat.com> - 1:2.56-365
|
||||||
|
- Increase release to favour standalone package
|
||||||
|
|
||||||
|
* Wed May 11 2016 Jitka Plesnikova <jplesnik@redhat.com> - 2.56-1
|
||||||
|
- 2.56 bump in order to dual-live with perl 5.24
|
||||||
|
|
||||||
|
* Thu Feb 04 2016 Fedora Release Engineering <releng@fedoraproject.org> - 1:2.53-347
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
|
||||||
|
|
||||||
|
* Thu Jun 18 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1:2.53-346
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
|
||||||
|
|
||||||
|
* Thu Jun 04 2015 Jitka Plesnikova <jplesnik@redhat.com> - 1:2.53-345
|
||||||
|
- Increase release to favour standalone package
|
||||||
|
|
||||||
|
* Wed Jun 03 2015 Jitka Plesnikova <jplesnik@redhat.com> - 1:2.53-2
|
||||||
|
- Perl 5.22 rebuild
|
||||||
|
|
||||||
|
* Wed May 06 2015 Petr Pisar <ppisar@redhat.com> - 1:2.53-1
|
||||||
|
- 2.53 bump in order to dual-live with perl 5.22
|
||||||
|
|
||||||
|
* Wed Sep 03 2014 Jitka Plesnikova <jplesnik@redhat.com> - 1:2.51-4
|
||||||
|
- Increase Epoch to favour standalone package
|
||||||
|
|
||||||
|
* Tue Aug 26 2014 Jitka Plesnikova <jplesnik@redhat.com> - 2.51-3
|
||||||
|
- Perl 5.20 rebuild
|
||||||
|
|
||||||
|
* Sun Aug 17 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.51-2
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
|
||||||
|
|
||||||
|
* Mon Jul 07 2014 Petr Pisar <ppisar@redhat.com> - 2.51-1
|
||||||
|
- 2.51 bump
|
||||||
|
|
||||||
|
* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.45-3
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
|
||||||
|
|
||||||
|
* Sun Aug 04 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.45-2
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
|
||||||
|
|
||||||
|
* Mon Jul 15 2013 Petr Pisar <ppisar@redhat.com> - 2.45-1
|
||||||
|
- 2.45 bump
|
||||||
|
|
||||||
|
* Fri Jul 12 2013 Petr Pisar <ppisar@redhat.com> - 2.39-3
|
||||||
|
- Link minimal build-root packages against libperl.so explicitly
|
||||||
|
|
||||||
|
* Tue Jun 11 2013 Petr Pisar <ppisar@redhat.com> - 2.39-2
|
||||||
|
- Do not export private libraries
|
||||||
|
|
||||||
|
* Fri May 24 2013 Petr Pisar <ppisar@redhat.com> 2.39-1
|
||||||
|
- Specfile autogenerated by cpanspec 1.78.
|
Loading…
Reference in new issue