From 98bc384d2bd62f3abe7f8b14d8098b3445b6b6e3 Mon Sep 17 00:00:00 2001 From: Robin Rosenberg Date: Fri, 1 Nov 2013 16:43:46 +0100 Subject: [PATCH] testMaliciousPathEmpty fails on Windows Checking of spaces at the end of the file name caused the test to fail for Windows only. Bug: 396662 Change-Id: I47bcccb0fa32ce606276c3f30d454851d115ca11 Signed-off-by: Robin Rosenberg --- .../jgit/lib/DirCacheCheckoutMaliciousPathTest.java | 11 +++++++++-- .../org/eclipse/jgit/dircache/DirCacheCheckout.java | 5 +++-- 2 files changed, 12 insertions(+), 4 deletions(-) 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)