App-zipdetails
view release on metacpan or search on metacpan
bin/zipdetails view on Meta::CPAN
# TODO - fix this
internalFatal undef, "unsupported decodeLittleEndian length '" . length ($value) . "'";
}
}
sub decode_ux
{
my $extraID = shift ;
my $len = shift;
my $entry = shift;
# caller has checked that 3 bytes are available
return if $len == 0 ;
my $version = out_C " Version" ;
info $FH->tell() - 1, extraFieldIdentifier($extraID) . ": 'Version' should be " . decimalHex0x(1) . ", got " . decimalHex0x($version, 1)
if $version != 1 ;
my $available = $len - 1 ;
my $uidSize = out_C " UID Size";
$available -= 1;
if ($uidSize)
{
if ($available < $uidSize)
{
outSomeData($available, " Bad Extra Data");
error $FH->tell() - $available,
extraFieldIdentifier($extraID) . ": truncated reading 'UID'",
expectedMessage($uidSize, $available);
return;
}
myRead(my $data, $uidSize);
if (canDecodeLittleEndian($uidSize))
{
out2 $data, "UID", decodeLittleEndian($data);
}
else
{
out2 $data, "UID", "Invalid UID Value: " . hexDump($data);
info $FH->tell() - $uidSize, extraFieldIdentifier($extraID) . ": UID value is not a valid value"
}
$available -= $uidSize ;
}
else
{
info $FH->tell() - 1, extraFieldIdentifier($extraID) . ": 'UID Size' should not be zero"
}
if ($available < 1)
{
error $FH->tell(),
extraFieldIdentifier($extraID) . ": truncated reading 'GID Size'",
expectedMessage($uidSize, $available);
return ;
}
my $gidSize = out_C " GID Size";
$available -= 1 ;
if ($gidSize)
{
if ($available < $gidSize)
{
outSomeData($available, " Bad Extra Data");
error $FH->tell() - $available,
extraFieldIdentifier($extraID) . ": truncated reading 'GID'",
expectedMessage($gidSize, $available);
return;
}
myRead(my $data, $gidSize);
if (canDecodeLittleEndian($gidSize))
{
out2 $data, "GID", decodeLittleEndian($data);
}
else
{
out2 $data, "GID", "Invalid GID Value: " .hexDump($data);
info $FH->tell() - $gidSize, extraFieldIdentifier($extraID) . ": GID value is not a valid value"
}
$available -= $gidSize ;
}
else
{
info $FH->tell() - 1, extraFieldIdentifier($extraID) . ": 'GID Size' should not be zero"
}
}
sub decode_Java_exe
{
my $extraID = shift ;
my $len = shift;
my $entry = shift;
}
sub decode_up
{
# APPNOTE 6.3.10, sec 4.6.9
my $extraID = shift ;
my $len = shift;
my $entry = shift;
out_C " Version";
out_V " NameCRC32";
if ($len - 5 > 0)
{
myRead(my $data, $len - 5);
outputFilename($data, 1, " UnicodeName");
}
}
sub decode_ASi_Unix
{
my $extraID = shift ;
my $len = shift;
my $entry = shift;
# https://stackoverflow.com/questions/76581811/why-does-unzip-ignore-my-zip64-end-of-central-directory-record
out_V " CRC";
my $native_attrib = out_v " Mode";
# TODO - move to separate sub & tidy
if (1) # Unix
{
state $mask = {
0 => '---',
1 => '--x',
2 => '-w-',
3 => '-wx',
4 => 'r--',
5 => 'r-x',
6 => 'rw-',
7 => 'rwx',
} ;
( run in 0.568 second using v1.01-cache-2.11-cpan-5735350b133 )