diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/DirCacheCheckoutMaliciousPathTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/DirCacheCheckoutMaliciousPathTest.java index d263f629a..b3219cddb 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/DirCacheCheckoutMaliciousPathTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/DirCacheCheckoutMaliciousPathTest.java @@ -54,6 +54,7 @@ import org.junit.Test; public class DirCacheCheckoutMaliciousPathTest extends RepositoryTestCase { + protected ObjectId theHead; protected ObjectId theMerge; @@ -230,8 +231,14 @@ public void testMaliciousPathDot() throws Exception { } @Test - public void testMaliciousPathEmpty() throws Exception { - ((MockSystemReader) SystemReader.getInstance()).setCurrentPlatform(); + public void testMaliciousPathEmptyUnix() throws Exception { + ((MockSystemReader) SystemReader.getInstance()).setUnix(); + testMaliciousPathBadFirstCheckout("", "no"); + } + + @Test + public void testMaliciousPathEmptyWindows() throws Exception { + ((MockSystemReader) SystemReader.getInstance()).setWindows(); testMaliciousPathBadFirstCheckout("", "no"); } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java b/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java index dd9ee10bf..bd896864d 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java @@ -1202,8 +1202,9 @@ private static boolean isValidPathSegment(CanonicalTreeParser t) { // Space or period at end of file name is ignored by Windows. // Treat this as a bad path for now. We may want to handle // this as case insensitivity in the future. - if (raw[ptr - 1] == '.' || raw[ptr - 1] == ' ') - return false; + if (ptr > 0) + if (raw[ptr - 1] == '.' || raw[ptr - 1] == ' ') + return false; int i; // Bad names, eliminate suffix first for (i = start; i < ptr; ++i)