@@ -13,9 +13,12 @@ public class TarArchiveTests
13
13
[ Test ]
14
14
[ Category ( "Tar" ) ]
15
15
[ Category ( "CreatesTempFile" ) ]
16
- public void ExtractingContentsWithNonTraversalPathSucceeds ( )
16
+ [ TestCase ( "output" ) ]
17
+ [ TestCase ( "output/" ) ]
18
+ [ TestCase ( @"output\" , IncludePlatform = "Win" ) ]
19
+ public void ExtractingContentsWithNonTraversalPathSucceeds ( string outputDir )
17
20
{
18
- Assert . DoesNotThrow ( ( ) => ExtractTarOK ( "output" , "test-good " , allowTraverse : false ) ) ;
21
+ Assert . DoesNotThrow ( ( ) => ExtractTarOK ( outputDir , "file " , allowTraverse : false ) ) ;
19
22
}
20
23
21
24
[ Test ]
@@ -30,12 +33,26 @@ public void ExtractingContentsWithExplicitlyAllowedTraversalPathSucceeds()
30
33
[ Category ( "Tar" ) ]
31
34
[ Category ( "CreatesTempFile" ) ]
32
35
[ TestCase ( "output" , "../file" ) ]
36
+ [ TestCase ( "output/" , "../file" ) ]
33
37
[ TestCase ( "output" , "../output.txt" ) ]
34
38
public void ExtractingContentsWithDisallowedPathsFails ( string outputDir , string fileName )
35
39
{
36
40
Assert . Throws < InvalidNameException > ( ( ) => ExtractTarOK ( outputDir , fileName , allowTraverse : false ) ) ;
37
41
}
38
42
43
+ [ Test ]
44
+ [ Category ( "Tar" ) ]
45
+ [ Category ( "CreatesTempFile" ) ]
46
+ [ Platform ( Include = "Win" , Reason = "Backslashes are only treated as path separators on windows" ) ]
47
+ [ TestCase ( @"output\" , @"..\file" ) ]
48
+ [ TestCase ( @"output/" , @"..\file" ) ]
49
+ [ TestCase ( "output" , @"..\output.txt" ) ]
50
+ [ TestCase ( @"output\" , @"..\output.txt" ) ]
51
+ public void ExtractingContentsOnWindowsWithDisallowedPathsFails ( string outputDir , string fileName )
52
+ {
53
+ Assert . Throws < InvalidNameException > ( ( ) => ExtractTarOK ( outputDir , fileName , allowTraverse : false ) ) ;
54
+ }
55
+
39
56
public void ExtractTarOK ( string outputDir , string fileName , bool allowTraverse )
40
57
{
41
58
var fileContent = Encoding . UTF8 . GetBytes ( "file content" ) ;
0 commit comments