Commit 90cd16d799 for perl

commit 90cd16d799e7d99652635adfdc93453a315d2668
Author: Paul Marquess <pmqs@outlook.com>
Date:   Mon Oct 12 14:39:24 2026 -0400

    cpan/IO-Compress - Update to version 2.225

      2.225 9 October 2026

        * update to version 2,225
          Fri Oct 9 15:32:13 2026 +0100
          ad11c5d0913e697572987e9c1bfc49b59743dee3

        * Update email address
          Fri Oct 9 14:12:19 2026 +0100
          08b77153277feaee4aa8f29778470b97983e19ca

        * Fix inefficient and unbounded code for reading gzip Name & Comment fields #86
          Fri Oct 9 13:58:14 2026 +0100
          cdc16a0607c97c457d49fcf23d9f28a049dc05de

        * add newStreamHook #84
          Fri Oct 9 11:49:22 2026 +0100
          d283b082186ec57fb11bd693f7ccca762d567c96

        * Fix typo
          Fri Sep 4 00:08:27 2026 +0100
          f6755650cc4ac1e2e34502ee5db1f9c855215976

        * Fix typo in Changes file
          Fri Aug 28 12:32:14 2026 +0100
          bd72147253d077e10157c4696e9d11b135762a4e

diff --git a/Porting/Maintainers.pl b/Porting/Maintainers.pl
index ca530822fc..510809e817 100755
--- a/Porting/Maintainers.pl
+++ b/Porting/Maintainers.pl
@@ -680,8 +680,8 @@ our %Modules = (
     },

     'IO-Compress' => {
-        'DISTRIBUTION' => 'PMQS/IO-Compress-2.224.tar.gz',
-        'SYNCINFO'     => 'jkeenan on Mon Aug 31 18:36:54 2026',
+        'DISTRIBUTION' => 'PMQS/IO-Compress-2.225.tar.gz',
+        'SYNCINFO'     => 'jkeenan on Mon Oct 12 14:38:45 2026',
         'MAIN_MODULE'  => 'IO::Compress::Base',
         'FILES'        => q[cpan/IO-Compress],
         'EXCLUDED'     => [
diff --git a/cpan/IO-Compress/Makefile.PL b/cpan/IO-Compress/Makefile.PL
index 38cad62d9d..947a15a9b8 100644
--- a/cpan/IO-Compress/Makefile.PL
+++ b/cpan/IO-Compress/Makefile.PL
@@ -4,9 +4,9 @@ use strict ;
 use warnings;
 require 5.008 ;

-$::VERSION = '2.224' ;
-$::DEP_ZLIB_VERSION = '2.224';
-$::DEP_BZIP2_VERSION = '2.224';
+$::VERSION = '2.225' ;
+$::DEP_ZLIB_VERSION = '2.225';
+$::DEP_BZIP2_VERSION = '2.225';

 use lib '.';
 use private::MakeUtil;
@@ -38,7 +38,7 @@ WriteMakefile(
     ),

     ABSTRACT => 'IO Interface to compressed data files/buffers',
-    AUTHOR   => 'Paul Marquess <pmqs@cpan.org>',
+    AUTHOR   => 'Paul Marquess <pmqs@outlook.com>',

     INSTALLDIRS => ($] >= 5.009 && $] < 5.011 ? 'perl' : 'site'),

diff --git a/cpan/IO-Compress/bin/streamzip b/cpan/IO-Compress/bin/streamzip
index b80e2fac40..83eb8249d1 100644
--- a/cpan/IO-Compress/bin/streamzip
+++ b/cpan/IO-Compress/bin/streamzip
@@ -288,7 +288,7 @@ L<https://rt.cpan.org/Public/Dist/Display.html?Name=IO-Compress>.

 =head1 AUTHOR

-Paul Marquess F<pmqs@cpan.org>.
+Paul Marquess F<pmqs@outlook.com>.

 =head1 COPYRIGHT

diff --git a/cpan/IO-Compress/lib/Compress/Zlib.pm b/cpan/IO-Compress/lib/Compress/Zlib.pm
index 0b1a3a65f8..e71c822d8d 100644
--- a/cpan/IO-Compress/lib/Compress/Zlib.pm
+++ b/cpan/IO-Compress/lib/Compress/Zlib.pm
@@ -7,17 +7,17 @@ use Carp ;
 use IO::Handle ;
 use Scalar::Util qw(dualvar);

-use IO::Compress::Base::Common 2.224 ;
-use Compress::Raw::Zlib 2.224 ;
-use IO::Compress::Gzip 2.224 ;
-use IO::Uncompress::Gunzip 2.224 ;
+use IO::Compress::Base::Common 2.225 ;
+use Compress::Raw::Zlib 2.225 ;
+use IO::Compress::Gzip 2.225 ;
+use IO::Uncompress::Gunzip 2.225 ;

 use strict ;
 use warnings ;
 use bytes ;
 our ($VERSION, $XS_VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);

-$VERSION = '2.224';
+$VERSION = '2.225';
 $XS_VERSION = $VERSION;
 $VERSION = eval $VERSION;

@@ -461,7 +461,7 @@ sub inflate

 package Compress::Zlib ;

-use IO::Compress::Gzip::Constants 2.224 ;
+use IO::Compress::Gzip::Constants 2.225 ;

 sub memGzip($)
 {
@@ -1501,7 +1501,7 @@ The primary site for gzip is L<http://www.gzip.org>.

 =head1 AUTHOR

-This module was written by Paul Marquess, C<pmqs@cpan.org>.
+This module was written by Paul Marquess, C<pmqs@outlook.com>.

 =head1 MODIFICATION HISTORY

diff --git a/cpan/IO-Compress/lib/File/GlobMapper.pm b/cpan/IO-Compress/lib/File/GlobMapper.pm
index 8810021de3..bdee2d3b85 100644
--- a/cpan/IO-Compress/lib/File/GlobMapper.pm
+++ b/cpan/IO-Compress/lib/File/GlobMapper.pm
@@ -683,7 +683,7 @@ L<File::Glob|File::Glob>

 =head1 AUTHOR

-The I<File::GlobMapper> module was written by Paul Marquess, F<pmqs@cpan.org>.
+The I<File::GlobMapper> module was written by Paul Marquess, F<pmqs@outlook.com>.

 =head1 COPYRIGHT AND LICENSE

diff --git a/cpan/IO-Compress/lib/IO/Compress.pm b/cpan/IO-Compress/lib/IO/Compress.pm
index 623ab80b24..bfd9cdc3b5 100644
--- a/cpan/IO-Compress/lib/IO/Compress.pm
+++ b/cpan/IO-Compress/lib/IO/Compress.pm
@@ -1,6 +1,6 @@
 package IO::Compress;

-our $VERSION = '2.224' ;
+our $VERSION = '2.225' ;

 =head1 NAME

@@ -12,7 +12,7 @@ This is a stub module. It contains no code.

 =head1 AUTHOR

-Paul Marquess F<pmqs@cpan.org>.
+Paul Marquess F<pmqs@outlook.com>.

 =head1 COPYRIGHT

diff --git a/cpan/IO-Compress/lib/IO/Compress/Adapter/Bzip2.pm b/cpan/IO-Compress/lib/IO/Compress/Adapter/Bzip2.pm
index 4dcdf9706a..65d391aa53 100644
--- a/cpan/IO-Compress/lib/IO/Compress/Adapter/Bzip2.pm
+++ b/cpan/IO-Compress/lib/IO/Compress/Adapter/Bzip2.pm
@@ -4,12 +4,12 @@ use strict;
 use warnings;
 use bytes;

-use IO::Compress::Base::Common  2.224 qw(:Status);
+use IO::Compress::Base::Common  2.225 qw(:Status);

-use Compress::Raw::Bzip2  2.224 ;
+use Compress::Raw::Bzip2  2.225 ;

 our ($VERSION);
-$VERSION = '2.224';
+$VERSION = '2.225';

 sub mkCompObject
 {
diff --git a/cpan/IO-Compress/lib/IO/Compress/Adapter/Deflate.pm b/cpan/IO-Compress/lib/IO/Compress/Adapter/Deflate.pm
index e2ec3e90b5..b523eb9694 100644
--- a/cpan/IO-Compress/lib/IO/Compress/Adapter/Deflate.pm
+++ b/cpan/IO-Compress/lib/IO/Compress/Adapter/Deflate.pm
@@ -4,13 +4,13 @@ use strict;
 use warnings;
 use bytes;

-use IO::Compress::Base::Common 2.224 qw(:Status);
-use Compress::Raw::Zlib 2.224 qw( !crc32 !adler32 ) ;
+use IO::Compress::Base::Common 2.225 qw(:Status);
+use Compress::Raw::Zlib 2.225 qw( !crc32 !adler32 ) ;

 require Exporter;
 our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, @EXPORT, %DEFLATE_CONSTANTS);

-$VERSION = '2.224';
+$VERSION = '2.225';
 @ISA = qw(Exporter);
 @EXPORT_OK = @Compress::Raw::Zlib::DEFLATE_CONSTANTS;
 %EXPORT_TAGS = %Compress::Raw::Zlib::DEFLATE_CONSTANTS;
diff --git a/cpan/IO-Compress/lib/IO/Compress/Adapter/Identity.pm b/cpan/IO-Compress/lib/IO/Compress/Adapter/Identity.pm
index 2d7b8cf688..d378a7477c 100644
--- a/cpan/IO-Compress/lib/IO/Compress/Adapter/Identity.pm
+++ b/cpan/IO-Compress/lib/IO/Compress/Adapter/Identity.pm
@@ -4,10 +4,10 @@ use strict;
 use warnings;
 use bytes;

-use IO::Compress::Base::Common  2.224 qw(:Status);
+use IO::Compress::Base::Common  2.225 qw(:Status);
 our ($VERSION);

-$VERSION = '2.224';
+$VERSION = '2.225';

 sub mkCompObject
 {
diff --git a/cpan/IO-Compress/lib/IO/Compress/Base.pm b/cpan/IO-Compress/lib/IO/Compress/Base.pm
index 10697235d5..fbe42413de 100644
--- a/cpan/IO-Compress/lib/IO/Compress/Base.pm
+++ b/cpan/IO-Compress/lib/IO/Compress/Base.pm
@@ -4,7 +4,7 @@ package IO::Compress::Base ;
 use strict ;
 use warnings;

-use IO::Compress::Base::Common 2.224 ;
+use IO::Compress::Base::Common 2.225 ;

 use IO::File ();
 use Scalar::Util ();
@@ -18,7 +18,7 @@ use Symbol();
 our (@ISA, $VERSION);
 @ISA    = qw(IO::File Exporter);

-$VERSION = '2.224';
+$VERSION = '2.225';

 #Can't locate object method "SWASHNEW" via package "utf8" (perhaps you forgot to load "utf8"?) at .../ext/Compress-Zlib/Gzip/blib/lib/Compress/Zlib/Common.pm line 16.

@@ -1041,7 +1041,7 @@ L<IO::Zlib|IO::Zlib>

 =head1 AUTHOR

-This module was written by Paul Marquess, C<pmqs@cpan.org>.
+This module was written by Paul Marquess, C<pmqs@outlook.com>.

 =head1 MODIFICATION HISTORY

diff --git a/cpan/IO-Compress/lib/IO/Compress/Base/Common.pm b/cpan/IO-Compress/lib/IO/Compress/Base/Common.pm
index 916987c095..96871b5bb8 100644
--- a/cpan/IO-Compress/lib/IO/Compress/Base/Common.pm
+++ b/cpan/IO-Compress/lib/IO/Compress/Base/Common.pm
@@ -11,7 +11,7 @@ use File::GlobMapper;
 require Exporter;
 our ($VERSION, @ISA, @EXPORT, %EXPORT_TAGS, $HAS_ENCODE);
 @ISA = qw(Exporter);
-$VERSION = '2.224';
+$VERSION = '2.225';

 @EXPORT = qw( isaFilehandle isaFilename isaScalar
               whatIsInput whatIsOutput
diff --git a/cpan/IO-Compress/lib/IO/Compress/Bzip2.pm b/cpan/IO-Compress/lib/IO/Compress/Bzip2.pm
index 44b29495b7..41ef5ac761 100644
--- a/cpan/IO-Compress/lib/IO/Compress/Bzip2.pm
+++ b/cpan/IO-Compress/lib/IO/Compress/Bzip2.pm
@@ -5,16 +5,16 @@ use warnings;
 use bytes;
 require Exporter ;

-use IO::Compress::Base 2.224 ;
+use IO::Compress::Base 2.225 ;

-use IO::Compress::Base::Common  2.224 qw();
-use IO::Compress::Adapter::Bzip2 2.224 ;
+use IO::Compress::Base::Common  2.225 qw();
+use IO::Compress::Adapter::Bzip2 2.225 ;



 our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $Bzip2Error);

-$VERSION = '2.224';
+$VERSION = '2.225';
 $Bzip2Error = '';

 @ISA    = qw(IO::Compress::Base Exporter);
@@ -51,7 +51,7 @@ sub getExtraParams
 {
     my $self = shift ;

-    use IO::Compress::Base::Common  2.224 qw(:Parse);
+    use IO::Compress::Base::Common  2.225 qw(:Parse);

     return (
             'blocksize100k' => [IO::Compress::Base::Common::Parse_unsigned,  1],
@@ -870,7 +870,7 @@ See the module L<Compress::Bzip2|Compress::Bzip2>

 =head1 AUTHOR

-This module was written by Paul Marquess, C<pmqs@cpan.org>.
+This module was written by Paul Marquess, C<pmqs@outlook.com>.

 =head1 MODIFICATION HISTORY

diff --git a/cpan/IO-Compress/lib/IO/Compress/Deflate.pm b/cpan/IO-Compress/lib/IO/Compress/Deflate.pm
index e3a60fad9c..f1cfc314e5 100644
--- a/cpan/IO-Compress/lib/IO/Compress/Deflate.pm
+++ b/cpan/IO-Compress/lib/IO/Compress/Deflate.pm
@@ -6,16 +6,16 @@ use bytes;

 require Exporter ;

-use IO::Compress::RawDeflate 2.224 ();
-use IO::Compress::Adapter::Deflate 2.224 ;
+use IO::Compress::RawDeflate 2.225 ();
+use IO::Compress::Adapter::Deflate 2.225 ;

-use IO::Compress::Zlib::Constants 2.224 ;
-use IO::Compress::Base::Common  2.224 qw();
+use IO::Compress::Zlib::Constants 2.225 ;
+use IO::Compress::Base::Common  2.225 qw();


 our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, %DEFLATE_CONSTANTS, $DeflateError);

-$VERSION = '2.224';
+$VERSION = '2.225';
 $DeflateError = '';

 @ISA    = qw(IO::Compress::RawDeflate Exporter);
@@ -943,7 +943,7 @@ The primary site for gzip is L<http://www.gzip.org>.

 =head1 AUTHOR

-This module was written by Paul Marquess, C<pmqs@cpan.org>.
+This module was written by Paul Marquess, C<pmqs@outlook.com>.

 =head1 MODIFICATION HISTORY

diff --git a/cpan/IO-Compress/lib/IO/Compress/FAQ.pod b/cpan/IO-Compress/lib/IO/Compress/FAQ.pod
index 251f7e534b..c09621546b 100644
--- a/cpan/IO-Compress/lib/IO/Compress/FAQ.pod
+++ b/cpan/IO-Compress/lib/IO/Compress/FAQ.pod
@@ -676,7 +676,7 @@ L<IO::Zlib|IO::Zlib>

 =head1 AUTHOR

-This module was written by Paul Marquess, C<pmqs@cpan.org>.
+This module was written by Paul Marquess, C<pmqs@outlook.com>.

 =head1 MODIFICATION HISTORY

diff --git a/cpan/IO-Compress/lib/IO/Compress/Gzip.pm b/cpan/IO-Compress/lib/IO/Compress/Gzip.pm
index 0a1b21251e..afc8449d4b 100644
--- a/cpan/IO-Compress/lib/IO/Compress/Gzip.pm
+++ b/cpan/IO-Compress/lib/IO/Compress/Gzip.pm
@@ -6,12 +6,12 @@ use bytes;

 require Exporter ;

-use IO::Compress::RawDeflate 2.224 () ;
-use IO::Compress::Adapter::Deflate 2.224 ;
+use IO::Compress::RawDeflate 2.225 () ;
+use IO::Compress::Adapter::Deflate 2.225 ;

-use IO::Compress::Base::Common  2.224 qw(:Status );
-use IO::Compress::Gzip::Constants 2.224 ;
-use IO::Compress::Zlib::Extra 2.224 ;
+use IO::Compress::Base::Common  2.225 qw(:Status );
+use IO::Compress::Gzip::Constants 2.225 ;
+use IO::Compress::Zlib::Extra 2.225 ;

 BEGIN
 {
@@ -23,7 +23,7 @@ BEGIN

 our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, %DEFLATE_CONSTANTS, $GzipError);

-$VERSION = '2.224';
+$VERSION = '2.225';
 $GzipError = '' ;

 @ISA    = qw(IO::Compress::RawDeflate Exporter);
@@ -1317,7 +1317,7 @@ The primary site for gzip is L<http://www.gzip.org>.

 =head1 AUTHOR

-This module was written by Paul Marquess, C<pmqs@cpan.org>.
+This module was written by Paul Marquess, C<pmqs@outlook.com>.

 =head1 MODIFICATION HISTORY

diff --git a/cpan/IO-Compress/lib/IO/Compress/Gzip/Constants.pm b/cpan/IO-Compress/lib/IO/Compress/Gzip/Constants.pm
index 9915806271..f637c17109 100644
--- a/cpan/IO-Compress/lib/IO/Compress/Gzip/Constants.pm
+++ b/cpan/IO-Compress/lib/IO/Compress/Gzip/Constants.pm
@@ -9,7 +9,7 @@ require Exporter;
 our ($VERSION, @ISA, @EXPORT, %GZIP_OS_Names);
 our ($GZIP_FNAME_INVALID_CHAR_RE, $GZIP_FCOMMENT_INVALID_CHAR_RE);

-$VERSION = '2.224';
+$VERSION = '2.225';

 @ISA = qw(Exporter);

diff --git a/cpan/IO-Compress/lib/IO/Compress/RawDeflate.pm b/cpan/IO-Compress/lib/IO/Compress/RawDeflate.pm
index ec7544a331..dbf9b4ed5b 100644
--- a/cpan/IO-Compress/lib/IO/Compress/RawDeflate.pm
+++ b/cpan/IO-Compress/lib/IO/Compress/RawDeflate.pm
@@ -6,16 +6,16 @@ use strict ;
 use warnings;
 use bytes;

-use IO::Compress::Base 2.224 ;
-use IO::Compress::Base::Common  2.224 qw(:Status :Parse);
-use IO::Compress::Adapter::Deflate 2.224 ;
-use Compress::Raw::Zlib 2.224 qw(Z_DEFLATED Z_DEFAULT_COMPRESSION Z_DEFAULT_STRATEGY);
+use IO::Compress::Base 2.225 ;
+use IO::Compress::Base::Common  2.225 qw(:Status :Parse);
+use IO::Compress::Adapter::Deflate 2.225 ;
+use Compress::Raw::Zlib 2.225 qw(Z_DEFLATED Z_DEFAULT_COMPRESSION Z_DEFAULT_STRATEGY);

 require Exporter ;

 our ($VERSION, @ISA, @EXPORT_OK, %DEFLATE_CONSTANTS, %EXPORT_TAGS, $RawDeflateError);

-$VERSION = '2.224';
+$VERSION = '2.225';
 $RawDeflateError = '';

 @ISA = qw(IO::Compress::Base Exporter);
@@ -1062,7 +1062,7 @@ The primary site for gzip is L<http://www.gzip.org>.

 =head1 AUTHOR

-This module was written by Paul Marquess, C<pmqs@cpan.org>.
+This module was written by Paul Marquess, C<pmqs@outlook.com>.

 =head1 MODIFICATION HISTORY

diff --git a/cpan/IO-Compress/lib/IO/Compress/Zip.pm b/cpan/IO-Compress/lib/IO/Compress/Zip.pm
index 0d295a641b..32d22a7ed8 100644
--- a/cpan/IO-Compress/lib/IO/Compress/Zip.pm
+++ b/cpan/IO-Compress/lib/IO/Compress/Zip.pm
@@ -4,41 +4,41 @@ use strict ;
 use warnings;
 use bytes;

-use IO::Compress::Base::Common  2.224 qw(:Status );
-use IO::Compress::RawDeflate 2.224 ();
-use IO::Compress::Adapter::Deflate 2.224 ;
-use IO::Compress::Adapter::Identity 2.224 ;
-use IO::Compress::Zlib::Extra 2.224 ;
-use IO::Compress::Zip::Constants 2.224 ;
+use IO::Compress::Base::Common  2.225 qw(:Status );
+use IO::Compress::RawDeflate 2.225 ();
+use IO::Compress::Adapter::Deflate 2.225 ;
+use IO::Compress::Adapter::Identity 2.225 ;
+use IO::Compress::Zlib::Extra 2.225 ;
+use IO::Compress::Zip::Constants 2.225 ;

 use File::Spec();
 use Config;

-use Compress::Raw::Zlib 2.224 ();
+use Compress::Raw::Zlib 2.225 ();

 BEGIN
 {
     eval { require IO::Compress::Adapter::Bzip2 ;
-           IO::Compress::Adapter::Bzip2->VERSION( 2.224 );
+           IO::Compress::Adapter::Bzip2->VERSION( 2.225 );
            require IO::Compress::Bzip2 ;
-           IO::Compress::Bzip2->VERSION( 2.224 );
+           IO::Compress::Bzip2->VERSION( 2.225 );
          } ;

     eval { require IO::Compress::Adapter::Lzma ;
-           IO::Compress::Adapter::Lzma->VERSION( 2.224 );
+           IO::Compress::Adapter::Lzma->VERSION( 2.225 );
            require IO::Compress::Lzma ;
-           IO::Compress::Lzma->VERSION( 2.224 );
+           IO::Compress::Lzma->VERSION( 2.225 );
          } ;

     eval { require IO::Compress::Adapter::Xz ;
-           IO::Compress::Adapter::Xz->VERSION( 2.224 );
+           IO::Compress::Adapter::Xz->VERSION( 2.225 );
            require IO::Compress::Xz ;
-           IO::Compress::Xz->VERSION( 2.224 );
+           IO::Compress::Xz->VERSION( 2.225 );
          } ;
     eval { require IO::Compress::Adapter::Zstd ;
-           IO::Compress::Adapter::Zstd->VERSION( 2.224 );
+           IO::Compress::Adapter::Zstd->VERSION( 2.225 );
            require IO::Compress::Zstd ;
-           IO::Compress::Zstd->VERSION( 2.224 );
+           IO::Compress::Zstd->VERSION( 2.225 );
          } ;
 }

@@ -47,7 +47,7 @@ require Exporter ;

 our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, %DEFLATE_CONSTANTS, $ZipError);

-$VERSION = '2.224';
+$VERSION = '2.225';
 $ZipError = '';

 @ISA = qw(IO::Compress::RawDeflate Exporter);
@@ -2278,7 +2278,7 @@ The primary site for gzip is L<http://www.gzip.org>.

 =head1 AUTHOR

-This module was written by Paul Marquess, C<pmqs@cpan.org>.
+This module was written by Paul Marquess, C<pmqs@outlook.com>.

 =head1 MODIFICATION HISTORY

diff --git a/cpan/IO-Compress/lib/IO/Compress/Zip/Constants.pm b/cpan/IO-Compress/lib/IO/Compress/Zip/Constants.pm
index 2194f3e3af..61511b5705 100644
--- a/cpan/IO-Compress/lib/IO/Compress/Zip/Constants.pm
+++ b/cpan/IO-Compress/lib/IO/Compress/Zip/Constants.pm
@@ -7,7 +7,7 @@ require Exporter;

 our ($VERSION, @ISA, @EXPORT, %ZIP_CM_MIN_VERSIONS);

-$VERSION = '2.224';
+$VERSION = '2.225';

 @ISA = qw(Exporter);

diff --git a/cpan/IO-Compress/lib/IO/Compress/Zlib/Constants.pm b/cpan/IO-Compress/lib/IO/Compress/Zlib/Constants.pm
index f991ece33a..72edfadc98 100644
--- a/cpan/IO-Compress/lib/IO/Compress/Zlib/Constants.pm
+++ b/cpan/IO-Compress/lib/IO/Compress/Zlib/Constants.pm
@@ -9,7 +9,7 @@ require Exporter;

 our ($VERSION, @ISA, @EXPORT);

-$VERSION = '2.224';
+$VERSION = '2.225';

 @ISA = qw(Exporter);

diff --git a/cpan/IO-Compress/lib/IO/Compress/Zlib/Extra.pm b/cpan/IO-Compress/lib/IO/Compress/Zlib/Extra.pm
index 793a36999e..ca9a953d75 100644
--- a/cpan/IO-Compress/lib/IO/Compress/Zlib/Extra.pm
+++ b/cpan/IO-Compress/lib/IO/Compress/Zlib/Extra.pm
@@ -6,9 +6,9 @@ use bytes;

 our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS);

-$VERSION = '2.224';
+$VERSION = '2.225';

-use IO::Compress::Gzip::Constants 2.224 ;
+use IO::Compress::Gzip::Constants 2.225 ;

 sub ExtraFieldError
 {
diff --git a/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Bunzip2.pm b/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Bunzip2.pm
index be738a8359..aa9313f02b 100644
--- a/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Bunzip2.pm
+++ b/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Bunzip2.pm
@@ -4,12 +4,12 @@ use strict;
 use warnings;
 use bytes;

-use IO::Compress::Base::Common 2.224 qw(:Status);
+use IO::Compress::Base::Common 2.225 qw(:Status);

-use Compress::Raw::Bzip2 2.224 ;
+use Compress::Raw::Bzip2 2.225 ;

 our ($VERSION, @ISA);
-$VERSION = '2.224';
+$VERSION = '2.225';

 sub mkUncompObject
 {
diff --git a/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Identity.pm b/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Identity.pm
index b4a03ecbfb..868763c24d 100644
--- a/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Identity.pm
+++ b/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Identity.pm
@@ -4,14 +4,14 @@ use warnings;
 use strict;
 use bytes;

-use IO::Compress::Base::Common  2.224 qw(:Status);
+use IO::Compress::Base::Common  2.225 qw(:Status);
 use IO::Compress::Zip::Constants ;

 our ($VERSION);

-$VERSION = '2.224';
+$VERSION = '2.225';

-use Compress::Raw::Zlib 2.224 ();
+use Compress::Raw::Zlib 2.225 ();

 sub mkUncompObject
 {
diff --git a/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Inflate.pm b/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Inflate.pm
index 027a650bec..4e5be3b665 100644
--- a/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Inflate.pm
+++ b/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Inflate.pm
@@ -4,11 +4,11 @@ use strict;
 use warnings;
 use bytes;

-use IO::Compress::Base::Common  2.224 qw(:Status);
-use Compress::Raw::Zlib 2.224 qw(Z_OK Z_BUF_ERROR Z_STREAM_END Z_FINISH MAX_WBITS);
+use IO::Compress::Base::Common  2.225 qw(:Status);
+use Compress::Raw::Zlib 2.225 qw(Z_OK Z_BUF_ERROR Z_STREAM_END Z_FINISH MAX_WBITS);

 our ($VERSION);
-$VERSION = '2.224';
+$VERSION = '2.225';



diff --git a/cpan/IO-Compress/lib/IO/Uncompress/AnyInflate.pm b/cpan/IO-Compress/lib/IO/Uncompress/AnyInflate.pm
index f8f23838b0..04cbead3dc 100644
--- a/cpan/IO-Compress/lib/IO/Uncompress/AnyInflate.pm
+++ b/cpan/IO-Compress/lib/IO/Uncompress/AnyInflate.pm
@@ -6,22 +6,22 @@ use strict;
 use warnings;
 use bytes;

-use IO::Compress::Base::Common 2.224 qw(:Parse);
+use IO::Compress::Base::Common 2.225 qw(:Parse);

-use IO::Uncompress::Adapter::Inflate  2.224 ();
+use IO::Uncompress::Adapter::Inflate  2.225 ();


-use IO::Uncompress::Base  2.224 ;
-use IO::Uncompress::Gunzip  2.224 ;
-use IO::Uncompress::Inflate  2.224 ;
-use IO::Uncompress::RawInflate  2.224 ;
-use IO::Uncompress::Unzip  2.224 ;
+use IO::Uncompress::Base  2.225 ;
+use IO::Uncompress::Gunzip  2.225 ;
+use IO::Uncompress::Inflate  2.225 ;
+use IO::Uncompress::RawInflate  2.225 ;
+use IO::Uncompress::Unzip  2.225 ;

 require Exporter ;

 our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $AnyInflateError);

-$VERSION = '2.224';
+$VERSION = '2.225';
 $AnyInflateError = '';

 @ISA = qw(IO::Uncompress::Base Exporter);
@@ -1006,7 +1006,7 @@ The primary site for gzip is L<http://www.gzip.org>.

 =head1 AUTHOR

-This module was written by Paul Marquess, C<pmqs@cpan.org>.
+This module was written by Paul Marquess, C<pmqs@outlook.com>.

 =head1 MODIFICATION HISTORY

diff --git a/cpan/IO-Compress/lib/IO/Uncompress/AnyUncompress.pm b/cpan/IO-Compress/lib/IO/Uncompress/AnyUncompress.pm
index 2fbd57d729..566defca28 100644
--- a/cpan/IO-Compress/lib/IO/Uncompress/AnyUncompress.pm
+++ b/cpan/IO-Compress/lib/IO/Uncompress/AnyUncompress.pm
@@ -4,16 +4,16 @@ use strict;
 use warnings;
 use bytes;

-use IO::Compress::Base::Common 2.224 ();
+use IO::Compress::Base::Common 2.225 ();

-use IO::Uncompress::Base 2.224 ;
+use IO::Uncompress::Base 2.225 ;


 require Exporter ;

 our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $AnyUncompressError);

-$VERSION = '2.224';
+$VERSION = '2.225';
 $AnyUncompressError = '';

 @ISA = qw(IO::Uncompress::Base Exporter);
@@ -33,26 +33,26 @@ BEGIN
    # Don't trigger any __DIE__ Hooks.
    local $SIG{__DIE__};

-   eval ' use IO::Uncompress::Adapter::Inflate 2.224 ;';
-   eval ' use IO::Uncompress::Adapter::Bunzip2 2.224 ;';
-   eval ' use IO::Uncompress::Adapter::LZO 2.224 ;';
-   eval ' use IO::Uncompress::Adapter::Lzf 2.224 ;';
-   eval ' use IO::Uncompress::Adapter::UnLzma 2.224 ;';
-   eval ' use IO::Uncompress::Adapter::UnXz 2.224 ;';
-   eval ' use IO::Uncompress::Adapter::UnZstd 2.224 ;';
-   eval ' use IO::Uncompress::Adapter::UnLzip 2.224 ;';
-
-   eval ' use IO::Uncompress::Bunzip2 2.224 ;';
-   eval ' use IO::Uncompress::UnLzop 2.224 ;';
-   eval ' use IO::Uncompress::Gunzip 2.224 ;';
-   eval ' use IO::Uncompress::Inflate 2.224 ;';
-   eval ' use IO::Uncompress::RawInflate 2.224 ;';
-   eval ' use IO::Uncompress::Unzip 2.224 ;';
-   eval ' use IO::Uncompress::UnLzf 2.224 ;';
-   eval ' use IO::Uncompress::UnLzma 2.224 ;';
-   eval ' use IO::Uncompress::UnXz 2.224 ;';
-   eval ' use IO::Uncompress::UnZstd 2.224 ;';
-   eval ' use IO::Uncompress::UnLzip 2.224 ;';
+   eval ' use IO::Uncompress::Adapter::Inflate 2.225 ;';
+   eval ' use IO::Uncompress::Adapter::Bunzip2 2.225 ;';
+   eval ' use IO::Uncompress::Adapter::LZO 2.225 ;';
+   eval ' use IO::Uncompress::Adapter::Lzf 2.225 ;';
+   eval ' use IO::Uncompress::Adapter::UnLzma 2.225 ;';
+   eval ' use IO::Uncompress::Adapter::UnXz 2.225 ;';
+   eval ' use IO::Uncompress::Adapter::UnZstd 2.225 ;';
+   eval ' use IO::Uncompress::Adapter::UnLzip 2.225 ;';
+
+   eval ' use IO::Uncompress::Bunzip2 2.225 ;';
+   eval ' use IO::Uncompress::UnLzop 2.225 ;';
+   eval ' use IO::Uncompress::Gunzip 2.225 ;';
+   eval ' use IO::Uncompress::Inflate 2.225 ;';
+   eval ' use IO::Uncompress::RawInflate 2.225 ;';
+   eval ' use IO::Uncompress::Unzip 2.225 ;';
+   eval ' use IO::Uncompress::UnLzf 2.225 ;';
+   eval ' use IO::Uncompress::UnLzma 2.225 ;';
+   eval ' use IO::Uncompress::UnXz 2.225 ;';
+   eval ' use IO::Uncompress::UnZstd 2.225 ;';
+   eval ' use IO::Uncompress::UnLzip 2.225 ;';

 }

@@ -1082,7 +1082,7 @@ L<IO::Zlib|IO::Zlib>

 =head1 AUTHOR

-This module was written by Paul Marquess, C<pmqs@cpan.org>.
+This module was written by Paul Marquess, C<pmqs@outlook.com>.

 =head1 MODIFICATION HISTORY

diff --git a/cpan/IO-Compress/lib/IO/Uncompress/Base.pm b/cpan/IO-Compress/lib/IO/Uncompress/Base.pm
index 3b8b8e05f5..f2c9c4c265 100644
--- a/cpan/IO-Compress/lib/IO/Uncompress/Base.pm
+++ b/cpan/IO-Compress/lib/IO/Uncompress/Base.pm
@@ -9,12 +9,12 @@ our (@ISA, $VERSION, @EXPORT_OK, %EXPORT_TAGS);
 @ISA    = qw(IO::File Exporter);


-$VERSION = '2.224';
+$VERSION = '2.225';

 use constant G_EOF => 0 ;
 use constant G_ERR => -1 ;

-use IO::Compress::Base::Common 2.224 ;
+use IO::Compress::Base::Common 2.225 ;

 use IO::File ;
 use Symbol;
@@ -196,6 +196,32 @@ sub smartReadExact
     return $_[0]->smartRead($_[1], $_[2]) == $_[2];
 }

+sub smartReadToDelim
+{
+    my $self = shift ;
+    my $out = shift ;
+    my $delim = shift ;
+    my $max_size = shift || 64 * 1024  ; # 64k
+
+    $$out = '' ;
+    my $got = '';
+
+    my $status = $self->smartRead(\$got, $max_size) >= 0
+        or return STATUS_ERROR ;
+
+    if ((my $ix = index($got, $delim)) >= 0)
+    {
+        $$out .= substr($got, 0, $ix + length($delim)) ;
+        $self->pushBack(substr($got, $ix + length($delim) )) ;
+    }
+    else
+    {
+        $$out = $got ;
+    }
+
+    return length $$out;
+}
+
 sub smartEof
 {
     my ($self) = $_[0];
@@ -1559,7 +1585,7 @@ L<IO::Zlib|IO::Zlib>

 =head1 AUTHOR

-This module was written by Paul Marquess, C<pmqs@cpan.org>.
+This module was written by Paul Marquess, C<pmqs@outlook.com>.

 =head1 MODIFICATION HISTORY

diff --git a/cpan/IO-Compress/lib/IO/Uncompress/Bunzip2.pm b/cpan/IO-Compress/lib/IO/Uncompress/Bunzip2.pm
index 7566f25caa..220cbf6e0b 100644
--- a/cpan/IO-Compress/lib/IO/Uncompress/Bunzip2.pm
+++ b/cpan/IO-Compress/lib/IO/Uncompress/Bunzip2.pm
@@ -4,15 +4,15 @@ use strict ;
 use warnings;
 use bytes;

-use IO::Compress::Base::Common 2.224 qw(:Status );
+use IO::Compress::Base::Common 2.225 qw(:Status );

-use IO::Uncompress::Base 2.224 ;
-use IO::Uncompress::Adapter::Bunzip2 2.224 ;
+use IO::Uncompress::Base 2.225 ;
+use IO::Uncompress::Adapter::Bunzip2 2.225 ;

 require Exporter ;
 our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $Bunzip2Error);

-$VERSION = '2.224';
+$VERSION = '2.225';
 $Bunzip2Error = '';

 @ISA    = qw(IO::Uncompress::Base Exporter);
@@ -914,7 +914,7 @@ See the module L<Compress::Bzip2|Compress::Bzip2>

 =head1 AUTHOR

-This module was written by Paul Marquess, C<pmqs@cpan.org>.
+This module was written by Paul Marquess, C<pmqs@outlook.com>.

 =head1 MODIFICATION HISTORY

diff --git a/cpan/IO-Compress/lib/IO/Uncompress/Gunzip.pm b/cpan/IO-Compress/lib/IO/Uncompress/Gunzip.pm
index ab32079bf5..2cd42c560f 100644
--- a/cpan/IO-Compress/lib/IO/Uncompress/Gunzip.pm
+++ b/cpan/IO-Compress/lib/IO/Uncompress/Gunzip.pm
@@ -6,12 +6,12 @@ use strict ;
 use warnings;
 use bytes;

-use IO::Uncompress::RawInflate 2.224 ;
+use IO::Uncompress::RawInflate 2.225 ;

-use Compress::Raw::Zlib 2.224 () ;
-use IO::Compress::Base::Common 2.224 qw(:Status );
-use IO::Compress::Gzip::Constants 2.224 ;
-use IO::Compress::Zlib::Extra 2.224 ;
+use Compress::Raw::Zlib 2.225 () ;
+use IO::Compress::Base::Common 2.225 qw(:Status );
+use IO::Compress::Gzip::Constants 2.225 ;
+use IO::Compress::Zlib::Extra 2.225 ;

 require Exporter ;

@@ -25,7 +25,7 @@ Exporter::export_ok_tags('all');

 $GunzipError = '';

-$VERSION = '2.224';
+$VERSION = '2.225';

 sub new
 {
@@ -44,7 +44,10 @@ sub gunzip

 sub getExtraParams
 {
-    return ( 'parseextra' => [IO::Compress::Base::Common::Parse_boolean,  0] ) ;
+    return (
+        'parseextra'    => [IO::Compress::Base::Common::Parse_boolean,  0],
+        'newstreamhook' => [IO::Compress::Base::Common::Parse_code,     undef],
+        ) ;
 }

 sub ckParams
@@ -55,6 +58,8 @@ sub ckParams
     # gunzip always needs crc32
     $got->setValue('crc32' => 1);

+    *$self->{'newstreamhook'} = $got->getValue('newstreamhook');
+
     return 1;
 }

@@ -185,14 +190,16 @@ sub _readGzipHeader($)

     my $origname ;
     if ($flag & GZIP_FLG_FNAME) {
-        $origname = "" ;
-        while (1) {
-            $self->smartReadExact(\$buffer, 1)
-                or return $self->TruncatedHeader("FNAME");
-            last if $buffer eq GZIP_NULL_BYTE ;
-            $origname .= $buffer
-        }
-        $keep .= $origname . GZIP_NULL_BYTE ;
+        $self->smartReadToDelim(\$origname, GZIP_NULL_BYTE) != STATUS_ERROR
+            or return $self->TruncatedHeader("FNAME");
+
+        $keep .= $origname  ;
+
+        return $self->HeaderError("No NULL termination found in FNAME")
+            if  substr($origname, -1, 1) ne GZIP_NULL_BYTE ;
+
+        # remove the terminating GZIP_NULL_BYTE
+        $origname = substr($origname, 0, -1);

         return $self->HeaderError("Non ISO 8859-1 Character found in Name")
             if *$self->{Strict} && $origname =~ /$GZIP_FNAME_INVALID_CHAR_RE/o ;
@@ -200,14 +207,16 @@ sub _readGzipHeader($)

     my $comment ;
     if ($flag & GZIP_FLG_FCOMMENT) {
-        $comment = "";
-        while (1) {
-            $self->smartReadExact(\$buffer, 1)
-                or return $self->TruncatedHeader("FCOMMENT");
-            last if $buffer eq GZIP_NULL_BYTE ;
-            $comment .= $buffer
-        }
-        $keep .= $comment . GZIP_NULL_BYTE ;
+        $self->smartReadToDelim(\$comment, GZIP_NULL_BYTE) != STATUS_ERROR
+            or return $self->TruncatedHeader("FCOMMENT");
+
+        $keep .= $comment  ;
+
+        return $self->HeaderError("No NULL termination found in FCOMMENT")
+            if  substr($comment, -1, 1) ne GZIP_NULL_BYTE ;
+
+        # remove the terminating GZIP_NULL_BYTE
+        $comment = substr($comment, 0, -1);

         return $self->HeaderError("Non ISO 8859-1 Character found in Comment")
             if *$self->{Strict} && $comment =~ /$GZIP_FCOMMENT_INVALID_CHAR_RE/o ;
@@ -232,7 +241,7 @@ sub _readGzipHeader($)

     *$self->{Type} = 'rfc1952';

-    return {
+    my $info = {
         'Type'          => 'rfc1952',
         'FingerprintLength'  => 2,
         'HeaderLength'  => length $keep,
@@ -263,7 +272,15 @@ sub _readGzipHeader($)
         #'CompSize'=> $compsize,
         #'CRC32'=> $CRC32,
         #'OrigSize'=> $ISIZE,
-      }
+      };
+
+    if (*$self->{'newstreamhook'})
+    {
+        my $cb = *$self->{'newstreamhook'} ;
+        $cb->($info);
+    }
+
+    return $info;
 }


@@ -754,6 +771,15 @@ will be overwritten by the uncompressed data.

 Defaults to 0.

+=item C<< NewStreamHook => \&hook >>
+The C<hook> sub will only be invoked when the C<MultiStream> option is enabled and the
+code has detected a new gzip header.
+
+Ther equivalent data that is returned by C<getHeaderInfo>will be passed into C<hook>
+
+A single parameter is passed into the C<hook> sub that consists of the data returned by
+running the C<getHeaderInfo> method on th enew gzip stream.
+
 =item C<< Strict => 0|1 >>

 This option controls whether the extra checks defined below are used when
@@ -1127,7 +1153,7 @@ The primary site for gzip is L<http://www.gzip.org>.

 =head1 AUTHOR

-This module was written by Paul Marquess, C<pmqs@cpan.org>.
+This module was written by Paul Marquess, C<pmqs@outlook.com>.

 =head1 MODIFICATION HISTORY

diff --git a/cpan/IO-Compress/lib/IO/Uncompress/Inflate.pm b/cpan/IO-Compress/lib/IO/Uncompress/Inflate.pm
index 6ff0fda7a8..3baf88e7fe 100644
--- a/cpan/IO-Compress/lib/IO/Uncompress/Inflate.pm
+++ b/cpan/IO-Compress/lib/IO/Uncompress/Inflate.pm
@@ -5,15 +5,15 @@ use strict ;
 use warnings;
 use bytes;

-use IO::Compress::Base::Common  2.224 qw(:Status );
-use IO::Compress::Zlib::Constants 2.224 ;
+use IO::Compress::Base::Common  2.225 qw(:Status );
+use IO::Compress::Zlib::Constants 2.225 ;

-use IO::Uncompress::RawInflate  2.224 ;
+use IO::Uncompress::RawInflate  2.225 ;

 require Exporter ;
 our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $InflateError);

-$VERSION = '2.224';
+$VERSION = '2.225';
 $InflateError = '';

 @ISA    = qw(IO::Uncompress::RawInflate Exporter);
@@ -1002,7 +1002,7 @@ The primary site for gzip is L<http://www.gzip.org>.

 =head1 AUTHOR

-This module was written by Paul Marquess, C<pmqs@cpan.org>.
+This module was written by Paul Marquess, C<pmqs@outlook.com>.

 =head1 MODIFICATION HISTORY

diff --git a/cpan/IO-Compress/lib/IO/Uncompress/RawInflate.pm b/cpan/IO-Compress/lib/IO/Uncompress/RawInflate.pm
index 784fdd84f8..150707104b 100644
--- a/cpan/IO-Compress/lib/IO/Uncompress/RawInflate.pm
+++ b/cpan/IO-Compress/lib/IO/Uncompress/RawInflate.pm
@@ -5,16 +5,16 @@ use strict ;
 use warnings;
 use bytes;

-use Compress::Raw::Zlib 2.224 ;
-use IO::Compress::Base::Common  2.224 qw(:Status );
+use Compress::Raw::Zlib 2.225 ;
+use IO::Compress::Base::Common  2.225 qw(:Status );

-use IO::Uncompress::Base  2.224 ;
-use IO::Uncompress::Adapter::Inflate  2.224 ;
+use IO::Uncompress::Base  2.225 ;
+use IO::Uncompress::Adapter::Inflate  2.225 ;

 require Exporter ;
 our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, %DEFLATE_CONSTANTS, $RawInflateError);

-$VERSION = '2.224';
+$VERSION = '2.225';
 $RawInflateError = '';

 @ISA    = qw(IO::Uncompress::Base Exporter);
@@ -1130,7 +1130,7 @@ The primary site for gzip is L<http://www.gzip.org>.

 =head1 AUTHOR

-This module was written by Paul Marquess, C<pmqs@cpan.org>.
+This module was written by Paul Marquess, C<pmqs@outlook.com>.

 =head1 MODIFICATION HISTORY

diff --git a/cpan/IO-Compress/lib/IO/Uncompress/Unzip.pm b/cpan/IO-Compress/lib/IO/Uncompress/Unzip.pm
index e005e19356..969b7d3670 100644
--- a/cpan/IO-Compress/lib/IO/Uncompress/Unzip.pm
+++ b/cpan/IO-Compress/lib/IO/Uncompress/Unzip.pm
@@ -6,14 +6,14 @@ use warnings;
 use bytes;

 use IO::File;
-use IO::Uncompress::RawInflate  2.224 ;
-use IO::Compress::Base::Common  2.224 qw(:Status );
-use IO::Uncompress::Adapter::Inflate  2.224 ;
-use IO::Uncompress::Adapter::Identity 2.224 ;
-use IO::Compress::Zlib::Extra 2.224 ;
-use IO::Compress::Zip::Constants 2.224 ;
+use IO::Uncompress::RawInflate  2.225 ;
+use IO::Compress::Base::Common  2.225 qw(:Status );
+use IO::Uncompress::Adapter::Inflate  2.225 ;
+use IO::Uncompress::Adapter::Identity 2.225 ;
+use IO::Compress::Zlib::Extra 2.225 ;
+use IO::Compress::Zip::Constants 2.225 ;

-use Compress::Raw::Zlib 2.224 () ;
+use Compress::Raw::Zlib 2.225 () ;

 BEGIN
 {
@@ -21,13 +21,13 @@ BEGIN
    local $SIG{__DIE__};

     eval{ require IO::Uncompress::Adapter::Bunzip2 ;
-          IO::Uncompress::Adapter::Bunzip2->VERSION(2.224) } ;
+          IO::Uncompress::Adapter::Bunzip2->VERSION(2.225) } ;
     eval{ require IO::Uncompress::Adapter::UnLzma ;
-          IO::Uncompress::Adapter::UnLzma->VERSION(2.224) } ;
+          IO::Uncompress::Adapter::UnLzma->VERSION(2.225) } ;
     eval{ require IO::Uncompress::Adapter::UnXz ;
-          IO::Uncompress::Adapter::UnXz->VERSION(2.224) } ;
+          IO::Uncompress::Adapter::UnXz->VERSION(2.225) } ;
     eval{ require IO::Uncompress::Adapter::UnZstd ;
-          IO::Uncompress::Adapter::UnZstd->VERSION(2.224) } ;
+          IO::Uncompress::Adapter::UnZstd->VERSION(2.225) } ;
 }


@@ -35,7 +35,7 @@ require Exporter ;

 our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $UnzipError, %headerLookup);

-$VERSION = '2.224';
+$VERSION = '2.225';
 $UnzipError = '';

 @ISA    = qw(IO::Uncompress::RawInflate Exporter);
@@ -2013,7 +2013,7 @@ The primary site for gzip is L<http://www.gzip.org>.

 =head1 AUTHOR

-This module was written by Paul Marquess, C<pmqs@cpan.org>.
+This module was written by Paul Marquess, C<pmqs@outlook.com>.

 =head1 MODIFICATION HISTORY

diff --git a/cpan/IO-Compress/t/004gziphdr.t b/cpan/IO-Compress/t/004gziphdr.t
index 775de6bf14..7e3b77f15e 100644
--- a/cpan/IO-Compress/t/004gziphdr.t
+++ b/cpan/IO-Compress/t/004gziphdr.t
@@ -20,7 +20,7 @@ BEGIN {
         if eval { require Test::NoWarnings ;  Test::NoWarnings->import; 1 };


-    plan tests => 918 + $extra ;
+    plan tests => 928 + $extra ;

     use_ok('Compress::Raw::Zlib') ;
     use_ok('IO::Compress::Gzip::Constants') ;
@@ -735,10 +735,9 @@ EOM
 }

 my $Name = "fred" ;
-    my $truncated ;
 for my $index ( GZIP_MIN_HEADER_SIZE ..  GZIP_MIN_HEADER_SIZE + length($Name) -1)
 {
-    title "Header Corruption - Truncated in Name";
+    title "Header Corruption - Truncated in Name - index $index";
     my $string = <<EOM;
 some text
 EOM
@@ -754,8 +753,7 @@ EOM
     ok ! $g
 	or print "# $g\n" ;

-    like $GunzipError, '/^Header Error: Truncated in FNAME Section/';
-
+    like $GunzipError, '/^Header Error: (Truncated in FNAME Section|No NULL termination found in FNAME)/';
 }

 my $Comment = "comment" ;
@@ -780,8 +778,7 @@ EOM
     ok ! $g
 	or print "# $g\n" ;

-    like $GunzipError, '/^Header Error: Truncated in FCOMMENT Section/';
-
+    like $GunzipError, '/^Header Error: (Truncated in FCOMMENT Section|No NULL termination found in FCOMMENT)/';
 }

 for my $index ( GZIP_MIN_HEADER_SIZE ..  GZIP_MIN_HEADER_SIZE + GZIP_FHCRC_SIZE -1)
@@ -987,3 +984,128 @@ EOM
         ok ! $x ;
     }
 }
+
+{
+    title "NewStreamHook - one stream";
+
+    my $lex = LexFile->new( my $name );
+
+    my $gz = IO::Compress::Gzip->new( $name, Name => "first" )
+            or diag "GzipError is $GzipError" ;
+
+    $gz->write("abcd");
+
+    $gz->close() ;
+
+    my @names ;
+
+    my $gunzip = IO::Uncompress::Gunzip->new( $name,
+            MultiStream   => 1,
+            Append        => 1,
+            NewStreamHook =>
+                sub
+                {
+                    my $info = shift;
+                    push @names, $info->{Name};
+                }
+            )
+            or diag "GunzipError is $GunzipError" ;
+
+    my $data;
+    1 while $gunzip->read($data) > 0;
+
+    is $data, "abcd" ;
+
+    is_deeply \@names, ["first"], "NewStreamHook called with correct names" ;
+}
+
+
+{
+    title "NewStreamHook - two streams";
+
+    my $lex = LexFile->new( my $name );
+
+    my $gz = IO::Compress::Gzip->new( $name, Name => "first" )
+            or diag "GzipError is $GzipError" ;
+
+    $gz->write("abcd");
+
+    $gz->newStream( Name => "second" );
+    $gz->write("efgh");
+
+    $gz->close() ;
+
+    my @names ;
+
+    my $gunzip = IO::Uncompress::Gunzip->new( $name,
+            MultiStream   => 1,
+            Append        => 1,
+            NewStreamHook =>
+                sub
+                {
+                    my $info = shift;
+                    push @names, $info->{Name};
+                }
+            )
+            or diag "GunzipError is $GunzipError" ;
+
+    my $data;
+    1 while $gunzip->read($data) > 0;
+
+    is $data, "abcdefgh" ;
+
+    is_deeply \@names, ["first", "second"], "NewStreamHook called with correct names" ;
+}
+
+{
+    title "Tets really long FNAME field";
+    # https://github.com/pmqs/IO-Compress/issues/86
+
+    my $lex = LexFile->new( my $name );
+
+    my $fname = "x" x (1 + (1024 * 64));
+
+    my $gz = IO::Compress::Gzip->new( $name, Name => $fname )
+            or diag "GzipError is $GzipError" ;
+
+    $gz->write("abcd");
+
+    $gz->newStream( Name => "second" );
+    $gz->write("efgh");
+
+    $gz->close() ;
+
+    my @names ;
+
+    my $gunzip = IO::Uncompress::Gunzip->new( $name);
+
+    like $GunzipError, '/Header Error: No NULL termination found in FNAME/', "Got expected error" ;
+
+}
+
+{
+    title "Tets really long COMMENT field";
+    # https://github.com/pmqs/IO-Compress/issues/86
+
+    my $lex = LexFile->new( my $name );
+
+    my $fname = "fred";
+    my $comment = "x" x (1 + (1024 * 64));
+
+    my $gz = IO::Compress::Gzip->new( $name, Name => $fname, Comment => $comment )
+            or diag "GzipError is $GzipError" ;
+
+    $gz->write("abcd");
+
+    $gz->newStream( Name => "second" );
+    $gz->write("efgh");
+
+    $gz->close() ;
+
+    my @names ;
+
+    my $gunzip = IO::Uncompress::Gunzip->new( $name);
+
+    like $GunzipError, '/Header Error: No NULL termination found in FCOMMENT/', "Got expected error" ;
+
+}
\ No newline at end of file
diff --git a/cpan/IO-Compress/t/105oneshot-gzip-only.t b/cpan/IO-Compress/t/105oneshot-gzip-only.t
index 69eb1c221e..3922464260 100644
--- a/cpan/IO-Compress/t/105oneshot-gzip-only.t
+++ b/cpan/IO-Compress/t/105oneshot-gzip-only.t
@@ -19,7 +19,7 @@ BEGIN {
     $extra = 1
         if eval { require Test::NoWarnings ;  Test::NoWarnings->import; 1 };

-    plan tests => 70 + $extra ;
+    plan tests => 73 + $extra ;

     use_ok('IO::Compress::Gzip', qw($GzipError)) ;
     use_ok('IO::Uncompress::Gunzip', qw($GunzipError)) ;
@@ -126,4 +126,42 @@ sub gzipGetHeader
     cmp_ok $hdr->{Time}, '<=', $after, "  Time is ok";
 }

+
+{
+    title "NewStreamHook - two streams";
+
+    use IO::Uncompress::Gunzip qw($GunzipError gunzip) ;
+
+    my $lex = LexFile->new( my $name );
+
+    my $gz = IO::Compress::Gzip->new( $name, Name => "first" )
+            or diag "GzipError is $GzipError" ;
+
+    $gz->write("abcd");
+
+    $gz->newStream( Name => "second" );
+    $gz->write("efgh");
+
+    $gz->close() ;
+
+    my @names ;
+    my $data;
+
+    gunzip $name => \$data,
+            MultiStream   => 1,
+            Append        => 1,
+            NewStreamHook =>
+                sub
+                {
+                    my $info = shift;
+                    push @names, $info->{Name};
+                }
+            or diag "GunzipError is $GunzipError" ;
+
+
+    is $data, "abcdefgh" ;
+
+    is_deeply \@names, ["first", "second"], "NewStreamHook called with correct names" ;
+}
+
 # TODO add more error cases