X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Ftests%2Ftests.pm;h=4599cb98fe49d7627173d182f48ce2ef072f03ab;hb=59f738d500f51ffc5f487344865b8bed69c26281;hp=0cc6c7ad2325f0fd294274940d117fd3ebc3f52e;hpb=cc41c0acfbda000cb416b3492bc8de3480b62904;p=pintos-anon diff --git a/src/tests/tests.pm b/src/tests/tests.pm index 0cc6c7a..4599cb9 100644 --- a/src/tests/tests.pm +++ b/src/tests/tests.pm @@ -10,6 +10,9 @@ sub pass; die if @ARGV != 2; our ($test, $src_dir) = @ARGV; +my ($msg_file) = tempfile (); +select ($msg_file); + our (@prereq_tests) = (); if ($test =~ /^(.*)-persistence$/) { push (@prereq_tests, $1); @@ -19,8 +22,6 @@ for my $prereq_test (@prereq_tests) { fail "Prerequisite test $prereq_test failed.\n" if $result[0] ne 'PASS'; } -my ($msg_file) = tempfile (); -select ($msg_file); # Generic testing. @@ -560,12 +561,15 @@ sub read_tar { $size = 0 if $typeflag eq '5'; # Store content. + $name =~ s%^(/|\./|\.\./)*%%; # Strip leading "/", "./", "../". + $name = '' if $name eq '.' || $name eq '..'; if (exists $content{$name}) { fail "$archive: contains multiple entries for $name\n"; } if ($typeflag eq '5') { - $content{$name} = 'directory'; + $content{$name} = 'directory' if $name ne ''; } else { + fail "$archive: contains file with empty name\n" if $name eq ''; my ($position) = sysseek (ARCHIVE, 0, SEEK_CUR); $content{$name} = [$archive, $position, $size]; sysseek (ARCHIVE, int (($size + 511) / 512) * 512, SEEK_CUR);