Browse Source

Fix ObjectChecker when normalization is enabled

When safeForMacOS is enabled the checker verifies a name does not
match against another name in the same tree after normalization to
NFC. The check was incorrect and failed when the first name was put
in, rejecting simple trees containing only one file like "F".

Add a test for this simple tree to verify it is accepted.
Fix the test for NFC normalization to actually normalize
and have a collision.

Change-Id: I39e7d71150948872bff6cd2b06bf8dae52aa3c33
stable-3.4
Shawn Pearce 11 years ago
parent
commit
94330d9cb5
  1. 13
      org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ObjectCheckerTest.java
  2. 2
      org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectChecker.java

13
org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ObjectCheckerTest.java

@ -1493,8 +1493,8 @@ public class ObjectCheckerTest {
} }
StringBuilder b = new StringBuilder(); StringBuilder b = new StringBuilder();
entry(b, "100644 \u00C1"); entry(b, "100644 \u0065\u0301");
entry(b, "100644 \u004a\u0301"); entry(b, "100644 \u00e9");
byte[] data = b.toString().getBytes("UTF-8"); byte[] data = b.toString().getBytes("UTF-8");
try { try {
checker.setSafeForMacOS(true); checker.setSafeForMacOS(true);
@ -1505,6 +1505,15 @@ public class ObjectCheckerTest {
} }
} }
@Test
public void testInvalidTreeDuplicateNames8()
throws UnsupportedEncodingException, CorruptObjectException {
StringBuilder b = new StringBuilder();
entry(b, "100644 A");
checker.setSafeForMacOS(true);
checker.checkTree(b.toString().getBytes("UTF-8"));
}
@Test @Test
public void testRejectNulInPathSegment() { public void testRejectNulInPathSegment() {
try { try {

2
org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectChecker.java

@ -382,7 +382,7 @@ public class ObjectChecker {
throw new CorruptObjectException("truncated in name"); throw new CorruptObjectException("truncated in name");
checkPathSegment2(raw, thisNameB, ptr); checkPathSegment2(raw, thisNameB, ptr);
if (normalized != null) { if (normalized != null) {
if (normalized.add(normalize(raw, thisNameB, ptr))) if (!normalized.add(normalize(raw, thisNameB, ptr)))
throw new CorruptObjectException("duplicate entry names"); throw new CorruptObjectException("duplicate entry names");
} else if (duplicateName(raw, thisNameB, ptr)) } else if (duplicateName(raw, thisNameB, ptr))
throw new CorruptObjectException("duplicate entry names"); throw new CorruptObjectException("duplicate entry names");

Loading…
Cancel
Save