Fix false positives in hashing used by PathFilterGroup

The ByteArraySet failed to check the length of the entry correctly leading
to matches where no match should be.

Bug: 401249
Change-Id: I925bc48d9cafcdf13e1a797bb09fc2555eb270c5
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
This commit is contained in:
Robin Stocker 2013-02-19 23:41:15 +01:00 committed by Robin Rosenberg
parent 9a5f4b46cc
commit 5d7b722f6e
2 changed files with 14 additions and 1 deletions

View File

@ -134,6 +134,19 @@ public void testFilterIsPrefixOfKey() throws MissingObjectException,
assertTrue(filter.include(fakeWalk("d/e/f/g/h")));
}
@Test
public void testLongPaths() throws MissingObjectException,
IncorrectObjectTypeException, IOException {
TreeFilter longPathFilter = PathFilterGroup
.createFromStrings(
"tst/org/eclipse/jgit/treewalk/filter/PathFilterGroupTest.java",
"tst/org/eclipse/jgit/treewalk/filter/PathFilterGroupTest2.java");
assertFalse(longPathFilter
.include(fakeWalk("tst/org/eclipse/jgit/treewalk/FileTreeIteratorTest.java")));
assertFalse(longPathFilter.include(fakeWalk("tst/a-other-in-same")));
assertFalse(longPathFilter.include(fakeWalk("a-nothing-in-common")));
}
@Test
public void testStopWalk() throws MissingObjectException,
IncorrectObjectTypeException, IOException {

View File

@ -88,7 +88,7 @@ private byte[] get(final byte[] toFind, int length, int hash) {
}
private static boolean equals(byte[] a, byte[] b, int length) {
if (a.length < length || b.length < length)
if (a.length != length || b.length < length)
return false;
for (int i = 0; i < length; ++i) {
if (a[i] != b[i])