summaryrefslogtreecommitdiff
path: root/Master/tlpkg/tlperl/lib/IO/Uncompress/Unzip.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Master/tlpkg/tlperl/lib/IO/Uncompress/Unzip.pm')
-rw-r--r--Master/tlpkg/tlperl/lib/IO/Uncompress/Unzip.pm64
1 files changed, 51 insertions, 13 deletions
diff --git a/Master/tlpkg/tlperl/lib/IO/Uncompress/Unzip.pm b/Master/tlpkg/tlperl/lib/IO/Uncompress/Unzip.pm
index 4e8a0d67c7a..856487f8fcd 100644
--- a/Master/tlpkg/tlperl/lib/IO/Uncompress/Unzip.pm
+++ b/Master/tlpkg/tlperl/lib/IO/Uncompress/Unzip.pm
@@ -9,17 +9,20 @@ use warnings;
use bytes;
use IO::File;
-use IO::Uncompress::RawInflate 2.084 ;
-use IO::Compress::Base::Common 2.084 qw(:Status );
-use IO::Uncompress::Adapter::Inflate 2.084 ;
-use IO::Uncompress::Adapter::Identity 2.084 ;
-use IO::Compress::Zlib::Extra 2.084 ;
-use IO::Compress::Zip::Constants 2.084 ;
+use IO::Uncompress::RawInflate 2.093 ;
+use IO::Compress::Base::Common 2.093 qw(:Status );
+use IO::Uncompress::Adapter::Inflate 2.093 ;
+use IO::Uncompress::Adapter::Identity 2.093 ;
+use IO::Compress::Zlib::Extra 2.093 ;
+use IO::Compress::Zip::Constants 2.093 ;
-use Compress::Raw::Zlib 2.084 () ;
+use Compress::Raw::Zlib 2.093 () ;
BEGIN
{
+ # Don't trigger any __DIE__ Hooks.
+ local $SIG{__DIE__};
+
eval{ require IO::Uncompress::Adapter::Bunzip2 ;
import IO::Uncompress::Adapter::Bunzip2 } ;
eval{ require IO::Uncompress::Adapter::UnLzma ;
@@ -31,7 +34,7 @@ require Exporter ;
our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $UnzipError, %headerLookup);
-$VERSION = '2.084';
+$VERSION = '2.093';
$UnzipError = '';
@ISA = qw(IO::Uncompress::RawInflate Exporter);
@@ -70,6 +73,7 @@ sub getExtraParams
'name' => [IO::Compress::Base::Common::Parse_any, undef],
'stream' => [IO::Compress::Base::Common::Parse_boolean, 0],
+ 'efs' => [IO::Compress::Base::Common::Parse_boolean, 0],
# TODO - This means reading the central directory to get
# 1. the local header offsets
@@ -86,6 +90,7 @@ sub ckParams
$got->setValue('crc32' => 1);
*$self->{UnzipData}{Name} = $got->getValue('name');
+ *$self->{UnzipData}{efs} = $got->getValue('efs');
return 1;
}
@@ -551,6 +556,7 @@ sub _readZipHeader($)
my $extraField;
my @EXTRA = ();
my $streamingMode = ($gpFlag & ZIP_GP_FLAG_STREAMING_MASK) ? 1 : 0 ;
+ my $efs_flag = ($gpFlag & ZIP_GP_FLAG_LANGUAGE_ENCODING) ? 1 : 0;
return $self->HeaderError("Encrypted content not supported")
if $gpFlag & (ZIP_GP_FLAG_ENCRYPTED_MASK|ZIP_GP_FLAG_STRONG_ENCRYPTED_MASK);
@@ -565,6 +571,14 @@ sub _readZipHeader($)
{
$self->smartReadExact(\$filename, $filename_length)
or return $self->TruncatedHeader("Filename");
+
+ if (*$self->{UnzipData}{efs} && $efs_flag && $] >= 5.008004)
+ {
+ require Encode;
+ eval { $filename = Encode::decode_utf8($filename, 1) }
+ or Carp::croak "Zip Filename not UTF-8" ;
+ }
+
$keep .= $filename ;
}
@@ -705,6 +719,7 @@ sub _readZipHeader($)
'UncompressedLength' => $uncompressedLength ,
'CRC32' => $crc32 ,
'Name' => $filename,
+ 'efs' => $efs_flag, # language encoding flag
'Time' => _dosToUnixTime($lastModTime),
'Stream' => $streamingMode,
@@ -1107,7 +1122,8 @@ The functional interface needs Perl5.005 or better.
=head2 unzip $input_filename_or_reference => $output_filename_or_reference [, OPTS]
C<unzip> expects at least two parameters,
-C<$input_filename_or_reference> and C<$output_filename_or_reference>.
+C<$input_filename_or_reference> and C<$output_filename_or_reference>
+and zero or more optional parameters (see L</Optional Parameters>)
=head3 The C<$input_filename_or_reference> parameter
@@ -1120,7 +1136,7 @@ It can take one of the following forms:
=item A filename
-If the <$input_filename_or_reference> parameter is a simple scalar, it is
+If the C<$input_filename_or_reference> parameter is a simple scalar, it is
assumed to be a filename. This file will be opened for reading and the
input data will be read from it.
@@ -1217,9 +1233,9 @@ files/buffers.
=head2 Optional Parameters
-Unless specified below, the optional parameters for C<unzip>,
-C<OPTS>, are the same as those used with the OO interface defined in the
-L</"Constructor Options"> section below.
+The optional parameters for the one-shot function C<unzip>
+are (for the most part) identical to those used with the OO interface defined in the
+L</"Constructor Options"> section. The exceptions are listed below
=over 5
@@ -1431,6 +1447,18 @@ OPTS is a combination of the following options:
Open "membername" from the zip file for reading.
+=item C<< Efs => 0| 1 >>
+
+When this option is set to true AND the zip archive being read has
+the "Language Encoding Flag" (EFS) set, the member name is assumed to be encoded in UTF-8.
+
+If the member name in the zip archive is not valid UTF-8 when this optionn is true,
+the script will die with an error message.
+
+Note that this option only works with Perl 5.8.4 or better.
+
+This option defaults to B<false>.
+
=item C<< AutoClose => 0|1 >>
This option is only valid when the C<$input> parameter is a filehandle. If
@@ -1731,6 +1759,10 @@ Skips to the next compressed data stream in the input file/buffer. If a new
compressed data stream is found, the eof marker will be cleared and C<$.>
will be reset to 0.
+If trailing data is present immediately after the zip archive and the
+C<Transparent> option is enabled, this method will consider that trailing
+data to be another member of the zip archive.
+
Returns 1 if a new stream was found, 0 if none was found, and -1 if an
error was encountered.
@@ -1828,6 +1860,12 @@ to read a zip file and unzip its contents to disk.
The script is available from L<https://gist.github.com/eqhmcow/5389877>
+=head1 SUPPORT
+
+General feedback/questions/bug reports should be sent to
+L<https://github.com/pmqs/IO-Compress/issues> (preferred) or
+L<https://rt.cpan.org/Public/Dist/Display.html?Name=IO-Compress>.
+
=head1 SEE ALSO
L<Compress::Zlib>, L<IO::Compress::Gzip>, L<IO::Uncompress::Gunzip>, L<IO::Compress::Deflate>, L<IO::Uncompress::Inflate>, L<IO::Compress::RawDeflate>, L<IO::Uncompress::RawInflate>, L<IO::Compress::Bzip2>, L<IO::Uncompress::Bunzip2>, L<IO::Compress::Lzma>, L<IO::Uncompress::UnLzma>, L<IO::Compress::Xz>, L<IO::Uncompress::UnXz>, L<IO::Compress::Lzip>, L<IO::Uncompress::UnLzip>, L<IO::Compress::Lzop>, L<IO::Uncompress::UnLzop>, L<IO::Compress::Lzf>, L<IO::Uncompress::UnLzf>, L<IO::Compress::Zstd>, L<IO::Uncompress::UnZstd>, L<IO::Uncompress::AnyInflate>, L<IO::Uncompress::AnyUncompress>