From 3226e35db846bbb848c3fe62e3e435fae52a2d5b Mon Sep 17 00:00:00 2001 From: Christian Halstrick Date: Mon, 22 Dec 2014 11:19:22 +0100 Subject: [PATCH] Fix junit tests under windows when the platform is explicitly changed SystemReader used a chached ObjectChecker which was instantiated only once. But in case of unit tests where we can change the platform dynamically (e.g. MockSystemReader.setWindows()) this is wrong and caused DirCacheCheckoutMaliciousPathTest. testMaliciousAbsoluteCurDrivePathWindowsOnUnix() to fail. This change allows user of SystemReader to force the creation of a new ObjectChecker. MockSystemReader.setWindows() and .setUnix() make use of this feature. Change-Id: I87458d1dc63c1f5c18979f972b1c1f0d670a9ed8 --- .../eclipse/jgit/junit/MockSystemReader.java | 2 ++ .../org/eclipse/jgit/util/SystemReader.java | 18 +++++++++++++----- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/MockSystemReader.java b/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/MockSystemReader.java index 3d21f9f8a..65551d657 100644 --- a/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/MockSystemReader.java +++ b/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/MockSystemReader.java @@ -184,6 +184,7 @@ public class MockSystemReader extends SystemReader { setProperty("file.separator", "\\"); setProperty("path.separator", ";"); setProperty("line.separator", "\r\n"); + setPlatformChecker(); } /** @@ -194,5 +195,6 @@ public class MockSystemReader extends SystemReader { setProperty("file.separator", "/"); setProperty("path.separator", ":"); setProperty("line.separator", "\n"); + setPlatformChecker(); } } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/SystemReader.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/SystemReader.java index 3447f639d..f6f415e85 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/util/SystemReader.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/SystemReader.java @@ -163,11 +163,19 @@ public abstract class SystemReader { private void init() { // Creating ObjectChecker must be deferred. Unit tests change // behavior of is{Windows,MacOS} in constructor of subclass. - if (platformChecker == null) { - platformChecker = new ObjectChecker() - .setSafeForWindows(isWindows()) - .setSafeForMacOS(isMacOS()); - } + if (platformChecker == null) + setPlatformChecker(); + } + + /** + * Should be used in tests when the platform is explicitly changed. + * + * @since 3.6 + */ + protected final void setPlatformChecker() { + platformChecker = new ObjectChecker() + .setSafeForWindows(isWindows()) + .setSafeForMacOS(isMacOS()); } /**