📄 04_resolved_issues.t
字号:
BEGIN { if( $ENV{PERL_CORE} ) { chdir '../lib/Archive/Tar' if -d '../lib/Archive/Tar'; } use lib '../../..';}BEGIN { chdir 't' if -d 't' }use Test::More 'no_plan';use File::Basename 'basename';use strict;use lib '../lib';my $NO_UNLINK = @ARGV ? 1 : 0;my $Class = 'Archive::Tar';my $FileClass = $Class . '::File';use_ok( $Class );use_ok( $FileClass );### bug #13636### tests for @longlink behaviour on files that have a / at the end### of their shortened path, making them appear to be directories{ ok( 1, "Testing bug 13636" ); ### dont use the prefix, otherwise A::T will not use @longlink ### encoding style local $Archive::Tar::DO_NOT_USE_PREFIX = 1; local $Archive::Tar::DO_NOT_USE_PREFIX = 1; my $dir = 'Catalyst-Helper-Controller-Scaffold-HTML-Template-0_03/' . 'lib/Catalyst/Helper/Controller/Scaffold/HTML/'; my $file = 'Template.pm'; my $out = $$ . '.tar'; ### first create the file { my $tar = $Class->new; isa_ok( $tar, $Class, " Object" ); ok( $tar->add_data( $dir.$file => $$ ), " Added long file" ); ok( $tar->write($out), " File written to $out" ); } ### then read it back in { my $tar = $Class->new; isa_ok( $tar, $Class, " Object" ); ok( $tar->read( $out ), " Read in $out again" ); my @files = $tar->get_files; is( scalar(@files), 1, " Only 1 entry found" ); my $entry = shift @files; ok( $entry->is_file, " Entry is a file" ); is( $entry->name, $dir.$file, " With the proper name" ); } ### remove the file unless( $NO_UNLINK ) { 1 while unlink $out }} ### bug #14922### There's a bug in Archive::Tar that causes a file like: foo/foo.txt ### to be stored in the tar file as: foo/.txt### XXX could not be reproduced in 1.26 -- leave test to be sure{ ok( 1, "Testing bug 14922" ); my $dir = $$ . '/'; my $file = $$ . '.txt'; my $out = $$ . '.tar'; ### first create the file { my $tar = $Class->new; isa_ok( $tar, $Class, " Object" ); ok( $tar->add_data( $dir.$file => $$ ), " Added long file" ); ok( $tar->write($out), " File written to $out" ); } ### then read it back in { my $tar = $Class->new; isa_ok( $tar, $Class, " Object" ); ok( $tar->read( $out ), " Read in $out again" ); my @files = $tar->get_files; is( scalar(@files), 1, " Only 1 entry found" ); my $entry = shift @files; ok( $entry->is_file, " Entry is a file" ); is( $entry->full_path, $dir.$file, " With the proper name" ); } ### remove the file unless( $NO_UNLINK ) { 1 while unlink $out }} ### bug #30380: directory traversal vulnerability in Archive-Tar ### Archive::Tar allowed files to be extracted to a dir outside### it's cwd(), effectively allowing you to overwrite any files### on the system, given the right permissions.{ ok( 1, "Testing bug 30880" ); my $tar = $Class->new; isa_ok( $tar, $Class, " Object" ); ### absolute paths are already taken care of. Only relative paths ### matter my $in_file = basename($0); my $out_file = '../' . $in_file . ".$$"; ok( $tar->add_files( $in_file ), " Added '$in_file'" ); ok( $tar->rename( $in_file, $out_file ), " Renamed to '$out_file'" ); ### first, test with strict extract permissions onTODO: { local $Archive::Tar::INSECURE_EXTRACT_MODE = 0; ### we quell the error on STDERR local $Archive::Tar::WARN = 0; local $Archive::Tar::WARN = 0; ok( 1, " Extracting in secure mode" ); ok( ! $tar->extract_file( $out_file ), " File not extracted" ); ok( ! -e $out_file, " File '$out_file' does not exist" ); ok( $tar->error, " Error message stored" ); local $TODO = 'Exposed unrelated filespec handling bugs on VMS' if $^O eq 'VMS'; like( $tar->error, qr/attempting to leave/, " Proper violation detected" ); } ### now disable thoseTODO: { local $Archive::Tar::INSECURE_EXTRACT_MODE = 1; ok( 1, " Extracting in insecure mode" ); local $TODO = 'Exposed unrelated filespec handling bugs on VMS' if $^O eq 'VMS'; ok( $tar->extract_file( $out_file ), " File extracted" ); ok( -e $out_file, " File '$out_file' exists" ); ### and clean up unless( $NO_UNLINK ) { 1 while unlink $out_file }; } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -