Reject mixed case .git on Mac OS in ObjectChecker
Most Mac OS X systems use a case insensitive HFS+ volume. Like Windows ".git" and ".GIT" are the same path and can confuse a Git program into expecting a repository where one does not exist. Change-Id: Iec6ce9e6c2872f8b0850cc6aec023fa0fcb05ae4
This commit is contained in:
parent
ba0f89b421
commit
ed3879e389
|
@ -1294,7 +1294,7 @@ public void testInvalidTreeNameIsGit() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testInvalidTreeNameIsMixedCaseGit() {
|
public void testInvalidTreeNameIsMixedCaseGitWindows() {
|
||||||
StringBuilder b = new StringBuilder();
|
StringBuilder b = new StringBuilder();
|
||||||
entry(b, "100644 .GiT");
|
entry(b, "100644 .GiT");
|
||||||
byte[] data = Constants.encodeASCII(b.toString());
|
byte[] data = Constants.encodeASCII(b.toString());
|
||||||
|
@ -1307,6 +1307,20 @@ public void testInvalidTreeNameIsMixedCaseGit() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@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) {
|
||||||
|
assertEquals("invalid name '.GiT'", e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testInvalidTreeTruncatedInName() {
|
public void testInvalidTreeTruncatedInName() {
|
||||||
final StringBuilder b = new StringBuilder();
|
final StringBuilder b = new StringBuilder();
|
||||||
|
|
|
@ -100,6 +100,7 @@ public class ObjectChecker {
|
||||||
|
|
||||||
private boolean allowZeroMode;
|
private boolean allowZeroMode;
|
||||||
private boolean windows;
|
private boolean windows;
|
||||||
|
private boolean macosx;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enable accepting leading zero mode in tree entries.
|
* Enable accepting leading zero mode in tree entries.
|
||||||
|
@ -132,6 +133,21 @@ public ObjectChecker setSafeForWindows(boolean win) {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restrict trees to only names legal on Mac OS X platforms.
|
||||||
|
* <p>
|
||||||
|
* Rejects any mixed case forms of reserved names ({@code .git})
|
||||||
|
* for users working on HFS+ in case-insensitive (default) mode.
|
||||||
|
*
|
||||||
|
* @param mac true if Mac OS X name checking should be performed.
|
||||||
|
* @return {@code this}.
|
||||||
|
* @since 3.4
|
||||||
|
*/
|
||||||
|
public ObjectChecker setSafeForMacOS(boolean mac) {
|
||||||
|
macosx = mac;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check an object for parsing errors.
|
* Check an object for parsing errors.
|
||||||
*
|
*
|
||||||
|
@ -491,7 +507,7 @@ private static boolean isInvalidOnWindows(byte c) {
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isDotGit(byte[] buf, int p) {
|
private boolean isDotGit(byte[] buf, int p) {
|
||||||
if (windows)
|
if (windows || macosx)
|
||||||
return toLower(buf[p]) == 'g'
|
return toLower(buf[p]) == 'g'
|
||||||
&& toLower(buf[p + 1]) == 'i'
|
&& toLower(buf[p + 1]) == 'i'
|
||||||
&& toLower(buf[p + 2]) == 't';
|
&& toLower(buf[p + 2]) == 't';
|
||||||
|
|
Loading…
Reference in New Issue