The component name ".GIT" inside a tree entry could confuse a case insensitive filesystem into looking at a submodule and not a directory entry. Disallow any case permutations of ".git" to prevent this confusion from entering a repository and showing up at a later date on a case insensitive system. Change-Id: Iaa3f768931d0d5764bf07ac5f6f3ff2b1fdda01btags/v3.4.2.201412180340-r
@@ -1295,26 +1295,11 @@ public class ObjectCheckerTest { | |||
} | |||
@Test | |||
public void testInvalidTreeNameIsMixedCaseGitWindows() { | |||
public void testInvalidTreeNameIsMixedCaseGit() { | |||
StringBuilder b = new StringBuilder(); | |||
entry(b, "100644 .GiT"); | |||
byte[] data = Constants.encodeASCII(b.toString()); | |||
try { | |||
checker.setSafeForWindows(true); | |||
checker.checkTree(data); | |||
fail("incorrectly accepted an invalid tree"); | |||
} catch (CorruptObjectException e) { | |||
assertEquals("invalid name '.GiT'", e.getMessage()); | |||
} | |||
} | |||
@Test | |||
public void testInvalidTreeNameIsMixedCaseGitMacOS() { | |||
StringBuilder b = new StringBuilder(); | |||
entry(b, "100644 .GiT"); | |||
byte[] data = Constants.encodeASCII(b.toString()); | |||
try { | |||
checker.setSafeForMacOS(true); | |||
checker.checkTree(data); | |||
fail("incorrectly accepted an invalid tree"); | |||
} catch (CorruptObjectException e) { |
@@ -540,12 +540,10 @@ public class ObjectChecker { | |||
return 1 <= c && c <= 31; | |||
} | |||
private boolean isDotGit(byte[] buf, int p) { | |||
if (windows || macosx) | |||
return toLower(buf[p]) == 'g' | |||
&& toLower(buf[p + 1]) == 'i' | |||
&& toLower(buf[p + 2]) == 't'; | |||
return buf[p] == 'g' && buf[p + 1] == 'i' && buf[p + 2] == 't'; | |||
private static boolean isDotGit(byte[] buf, int p) { | |||
return toLower(buf[p]) == 'g' | |||
&& toLower(buf[p + 1]) == 'i' | |||
&& toLower(buf[p + 2]) == 't'; | |||
} | |||
private static char toLower(byte b) { |