Subject: | Missing return statement in /usr/share/perl5/vendor_perl/Archive/Zip/Member.pm::extractToFileNamed |
Date: | Thu, 19 Jun 2014 17:17:04 -0700 |
To: | bug-Archive-Zip [...] rt.cpan.org |
From: | Johannes Ernst <johannes.ernst [...] gmail.com> |
From http://svn.ali.as/cpan/trunk/Archive-Zip/lib/Archive/Zip/Member.pm:
Note single *** marked line that is missing. As a result, some of my archives stop unpacking after they have encountered a random symlink.
sub extractToFileNamed {
my $self = shift;
# local FS name
my $name = ( ref( $_[0] ) eq 'HASH' ) ? $_[0]->{name} : $_[0];
$self->{'isSymbolicLink'} = 0;
# Check if the file / directory is a symbolic link or not
if ( $self->{'externalFileAttributes'} == 0xA1FF0000 ) {
$self->{'isSymbolicLink'} = 1;
$self->{'newName'} = $name;
my ( $status, $fh ) = _newFileHandle( $name, 'r' );
my $retval = $self->extractToFileHandle($fh);
$fh->close();
***
return $retval;
***
} else {
#return _writeSymbolicLink($self, $name) if $self->isSymbolicLink();
my ( $status, $fh );
if ( $^O eq 'MSWin32' && $Archive::Zip::UNICODE ) {
$name = decode_utf8( Win32::GetFullPathName($name) );
mkpath_win32($name);
if ( $self->{'compressedSize'} == 0 ) {
return;
}
else {
Win32::CreateFile($name);
}
( $status, $fh ) = _newFileHandle( Win32::GetANSIPathName($name), 'w' );
}
else {
mkpath( dirname($name) ); # croaks on error
( $status, $fh ) = _newFileHandle( $name, 'w' );
}
return _ioError("Can't open file $name for write") unless $status;
my $retval = $self->extractToFileHandle($fh);
$fh->close();
chmod ($self->unixFileAttributes(), $name)
or return _error("Can't chmod() ${name}: $!");
utime( $self->lastModTime(), $self->lastModTime(), $name );
return $retval;
}
}