Plack-App-MCCS
view release on metacpan or search on metacpan
local/bin/zipdetails view on Meta::CPAN
{
my $signature = shift ;
my $data = shift ;
my $from_offset = $FH->tell() - 4;
print "\n";
++ $LocalHeaderCount;
my $hexHdrCount = sprintf("%X", $LocalHeaderCount) ;
out $data, "LOCAL HEADER #$hexHdrCount" , Value_V($signature);
my $buffer;
my ($loc, $CDcompressedLength, $cdZip64, $zip64Sizes, $cdIndex, $cdEntryOffset) ;
if (! $opt_scan)
{
($loc, $CDcompressedLength, $cdZip64, $zip64Sizes, $cdIndex, $cdEntryOffset) = @{ shift @CentralDirectory } ;
# my $cdi = sprintf("%X", $cdIndex) ;
# out1 "CENTRAL HEADER #$cdi", sprintf "Offset %s\n", Value_Q($cdEntryOffset);
}
out_C "Extract Zip Spec", \&decodeZipVer;
out_C "Extract OS", \&decodeOS;
my ($bgp, $gpFlag) = read_v();
my ($bcm, $compressedMethod) = read_v();
out $bgp, "General Purpose Flag", Value_v($gpFlag) ;
GeneralPurposeBits($compressedMethod, $gpFlag);
out $bcm, "Compression Method", compressionMethod($compressedMethod) ;
out_V "Last Mod Time", sub { getTime(_dosToUnixTime($_[0])) };
my $crc = out_V "CRC";
my $compressedLength = out_V "Compressed Length";
my $uncompressedLength = out_V "Uncompressed Length";
my $filenameLength = out_v "Filename Length";
my $extraLength = out_v "Extra Length";
my $filename ;
myRead($filename, $filenameLength);
outputFilename($filename);
my $cl64 = $compressedLength;
my %ExtraContext = ();
if ($extraLength)
{
my @z64 = ($uncompressedLength, $compressedLength, 1, 1);
$ExtraContext{Zip64} = \@z64 ;
$ExtraContext{InCentralDir} = 0;
walkExtra($extraLength, \%ExtraContext);
}
my @msg ;
# if ($cdZip64 && ! $ZIP64)
# {
# # Central directory said this was Zip64
# # some zip files don't have the Zip64 field in the local header
# # seems to be a streaming issue.
# push @msg, "Missing Zip64 extra field in Local Header #$hexHdrCount\n";
# if (! $zip64Sizes)
# {
# # Central has a ZIP64 entry that doesn't have sizes
# # Local doesn't have a Zip 64 at all
# push @msg, "Unzip may complain about 'overlapped components' #$hexHdrCount\n";
# }
# else
# {
# $ZIP64 = 1
# }
# }
my $size = 0;
$size = printAes(\%ExtraContext)
if $compressedMethod == 99 ;
$size += printLzmaProperties()
if $compressedMethod == ZIP_CM_LZMA ;
$CDcompressedLength = $compressedLength
if $opt_scan ;
$CDcompressedLength -= $size;
if ($CDcompressedLength) {
outSomeData($CDcompressedLength, "PAYLOAD", $opt_Redact) ;
}
if ($compressedMethod == 99) {
my $auth ;
myRead($auth, 10);
out $auth, "AES Auth", hexDump($auth);
}
print "WARNING: $_"
for @msg;
push @Messages, @msg ;
# $SEEN->save("LOCAL HEADER #" . sprintf("%X", $LocalHeaderCount), $filename, $from_offset, $from_offset + $CDcompressedLength);
}
sub redactFilename
{
my $filename = shift;
# Redact everything apart from directory seperators
$filename =~ s([^/])(X)g
if $opt_Redact;
return $filename;
}
sub outputFilename
{
( run in 0.584 second using v1.01-cache-2.11-cpan-99c4e6809bf )