diff --git a/Compress-Raw-Zlib-2.071-Adapt-tests-to-zlib-1.2.11.patch b/Compress-Raw-Zlib-2.071-Adapt-tests-to-zlib-1.2.11.patch new file mode 100644 index 0000000..5711c2a --- /dev/null +++ b/Compress-Raw-Zlib-2.071-Adapt-tests-to-zlib-1.2.11.patch @@ -0,0 +1,94 @@ +From b42f5c088158f473116d3aca2d050d4efb95b021 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Tue, 7 Feb 2017 14:44:48 +0100 +Subject: [PATCH] Adapt tests to zlib 1.2.11 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Since zlib-1.2.9 it's not safe to invoke deflateParams() when not all +input was consumed by deflate(). deflateParams() could return +Z_BUF_ERROR in some cases: + +commit 7161ad76e2d0ac7de2a6235fcad3b9dfc99e9140 +Author: Mark Adler +Date: Tue Nov 22 23:29:19 2016 -0800 + + Assure that deflateParams() will not switch functions mid-block. + + This alters the specification in zlib.h, so that deflateParams() + will not change any parameters if there is not enough output space + in the event that a block is emitted in order to allow switching + the compression function. + +zlib documentation recommends two fixes: + +To retry deflateParams() as it processes a piece of input underneath +until something else than Z_BUF_ERROR is returned. However this does +not work for me because then the compressed stream gets corrupted +and the subsequent inflate() returns a failure. + +Another fix is to flush the deflated stream with Z_BLOCK just before +any deflateParams() call that follows unifinished deflate(). This +assures the new deflate options will be applied immediatelly on next +deflate() call. This fix works for me. Thus I implemented it in the +tests. + +The new tests pass with zlib 1.2.8 as well as 1.2.11. 1.2.9 and 1.2.10 +seems broken changing the deflate options was fixed in 1.2.11. + +CPAN RT#119762 + +Signed-off-by: Petr Písař +--- + t/02zlib.t | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +diff --git a/t/02zlib.t b/t/02zlib.t +index 2c9aad6..50f6a82 100644 +--- a/t/02zlib.t ++++ b/t/02zlib.t +@@ -24,13 +24,13 @@ BEGIN + + my $count = 0 ; + if ($] < 5.005) { +- $count = 232 ; ++ $count = 236 ; + } + elsif ($] >= 5.006) { +- $count = 317 ; ++ $count = 320 ; + } + else { +- $count = 275 ; ++ $count = 278 ; + } + + plan tests => $count + $extra; +@@ -537,6 +537,7 @@ SKIP: + + $status = $x->deflate($hello, $Answer) ; + cmp_ok $status, '==', Z_OK ; ++ cmp_ok $x->flush($Answer, Z_BLOCK), '==', Z_OK ; + $input .= $hello; + + # error cases +@@ -561,6 +562,7 @@ SKIP: + + $status = $x->deflate($goodbye, $Answer) ; + cmp_ok $status, '==', Z_OK ; ++ cmp_ok $x->flush($Answer, Z_BLOCK), '==', Z_OK ; + $input .= $goodbye; + + # change only Level +@@ -572,6 +574,7 @@ SKIP: + + $status = $x->deflate($goodbye, $Answer) ; + cmp_ok $status, '==', Z_OK ; ++ cmp_ok $x->flush($Answer, Z_BLOCK), '==', Z_OK ; + $input .= $goodbye; + + # change only Strategy +-- +2.7.4 + diff --git a/IO-Compress-2.070-Adapt-tests-to-zlib-1.2.11.patch b/IO-Compress-2.070-Adapt-tests-to-zlib-1.2.11.patch new file mode 100644 index 0000000..91a35c8 --- /dev/null +++ b/IO-Compress-2.070-Adapt-tests-to-zlib-1.2.11.patch @@ -0,0 +1,95 @@ +From a30130055928e5979c35aceee75cc3becfe3ad22 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Tue, 7 Feb 2017 17:23:29 +0100 +Subject: [PATCH] Adapt tests to zlib 1.2.11 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +CPAN RT#120134 + +Signed-off-by: Petr Písař +--- + t/cz-03zlib-v1.t | 13 +++++++++++-- + t/cz-06gzsetp.t | 4 +++- + 2 files changed, 14 insertions(+), 3 deletions(-) + +diff --git a/t/cz-03zlib-v1.t b/t/cz-03zlib-v1.t +index a85ed10..e070d46 100755 +--- a/t/cz-03zlib-v1.t ++++ b/t/cz-03zlib-v1.t +@@ -23,10 +23,10 @@ BEGIN + + my $count = 0 ; + if ($] < 5.005) { +- $count = 453 ; ++ $count = 456 ; + } + else { +- $count = 471 ; ++ $count = 474 ; + } + + +@@ -721,6 +721,9 @@ EOM + + ($Answer, $status) = $x->deflate($hello) ; + ok $status == Z_OK ; ++ ($X, $status) = $x->flush(Z_BLOCK) ; ++ ok $status == Z_OK ; ++ $Answer .= $X ; + $input .= $hello; + + # error cases +@@ -747,6 +750,9 @@ EOM + ($X, $status) = $x->deflate($goodbye) ; + ok $status == Z_OK ; + $Answer .= $X ; ++ ($X, $status) = $x->flush(Z_BLOCK) ; ++ ok $status == Z_OK ; ++ $Answer .= $X ; + $input .= $goodbye; + + # change only Level +@@ -759,6 +765,9 @@ EOM + ($X, $status) = $x->deflate($goodbye) ; + ok $status == Z_OK ; + $Answer .= $X ; ++ ($X, $status) = $x->flush(Z_BLOCK) ; ++ ok $status == Z_OK ; ++ $Answer .= $X ; + $input .= $goodbye; + + # change only Strategy +diff --git a/t/cz-06gzsetp.t b/t/cz-06gzsetp.t +index b2cc687..45869a0 100644 +--- a/t/cz-06gzsetp.t ++++ b/t/cz-06gzsetp.t +@@ -39,7 +39,7 @@ my $ver = Compress::Zlib::zlib_version(); + plan skip_all => "gzsetparams needs zlib 1.0.6 or better. You have $ver\n" + if ZLIB_VERNUM() < 0x1060 ; + +-plan tests => 51 + $extra ; ++plan tests => 55 + $extra ; + + # Check zlib_version and ZLIB_VERSION are the same. + SKIP: { +@@ -65,6 +65,7 @@ SKIP: { + + $input .= $hello; + is $x->gzwrite($hello), $len_hello, "gzwrite returned $len_hello" ; ++ cmp_ok $x->gzflush(Z_BLOCK), '==', Z_OK, "flush before gzsetparams is ok"; + + # Error cases + eval { $x->gzsetparams() }; +@@ -120,6 +121,7 @@ foreach my $CompressClass ('IO::Compress::Gzip', + + my $input .= $hello; + is $x->write($hello), $len_hello, "wrote $len_hello bytes" ; ++ ok $x->flush(Z_BLOCK), "flush before deflateParams is ok"; + + # Change both Level & Strategy + ok $x->deflateParams(Z_BEST_SPEED, Z_HUFFMAN_ONLY), "deflateParams ok"; +-- +2.7.4 + diff --git a/perl.spec b/perl.spec index d32c8eb..e51e719 100644 --- a/perl.spec +++ b/perl.spec @@ -28,7 +28,7 @@ Name: perl Version: %{perl_version} # release number must be even higher, because dual-lived modules will be broken otherwise -Release: 387%{?dist} +Release: 388%{?dist} Epoch: %{perl_epoch} Summary: Practical Extraction and Report Language Group: Development/Languages @@ -272,6 +272,11 @@ Patch75: perl-5.24.1-permit-goto-at-top-level-of-multicalled-sub.patch # Fix a heap overlow in parsing $#, RT#129274, in upstream after 5.25.9 Patch76: perl-5.24.1-perl-129274-avoid-treating-the-in-as-a-comment-intro.patch +# Adapt tests to zlib-1.2.11, bug #1420326, CPAN RT#119762, +# should be removed after fixing Compress-Raw-Zlib properly +Patch77: Compress-Raw-Zlib-2.071-Adapt-tests-to-zlib-1.2.11.patch +Patch78: IO-Compress-2.070-Adapt-tests-to-zlib-1.2.11.patch + # Link XS modules to libperl.so with EU::CBuilder on Linux, bug #960048 Patch200: perl-5.16.3-Link-XS-modules-to-libperl.so-with-EU-CBuilder-on-Li.patch @@ -2972,6 +2977,12 @@ Perl extension for Version Objects %patch74 -p1 %patch75 -p1 %patch76 -p1 +pushd cpan/Compress-Raw-Zlib +%patch77 -p1 +popd +pushd cpan/IO-Compress +%patch78 -p1 +popd %patch200 -p1 %patch201 -p1 @@ -3036,6 +3047,7 @@ perl -x patchlevel.h \ 'Fedora Patch74: Fix a memory leak in B::RHE->HASH method (RT#130504)' \ 'Fedora Patch75: Fix parsing goto statements in multicalled subroutine (RT#113938)' \ 'Fedora Patch76: Fix a heap overlow in parsing $# (RT#129274)' \ + 'Fedora Patch77: Adapt tests to zlib-1.2.11 (CPAN RT#119762)' \ 'Fedora Patch200: Link XS modules to libperl.so with EU::CBuilder on Linux' \ 'Fedora Patch201: Link XS modules to libperl.so with EU::MM on Linux' \ %{nil} @@ -5312,6 +5324,9 @@ popd # Old changelog entries are preserved in CVS. %changelog +* Fri Feb 10 2017 Petr Pisar - 4:5.24.1-388 +- Adapt tests to zlib-1.2.11 (bug #1420326) + * Thu Jan 26 2017 Petr Pisar - 4:5.24.1-387 - Fix UTF-8 string handling in & operator (RT#129287) - Fix recreation of *:: (RT#129869)