diff options
author | Robin Stocker <robin@nibor.org> | 2013-02-19 23:41:15 +0100 |
---|---|---|
committer | Robin Rosenberg <robin.rosenberg@dewire.com> | 2013-02-20 00:37:57 +0100 |
commit | 5d7b722f6e20232a5e03d76f10c5c9554ab754a9 (patch) | |
tree | 653298d6aee06126afe545bc0b32ec2d344fa19d | |
parent | 9a5f4b46ccac22dd3dec8205ab50ec84f495db2f (diff) | |
download | jgit-5d7b722f6e20232a5e03d76f10c5c9554ab754a9.tar.gz jgit-5d7b722f6e20232a5e03d76f10c5c9554ab754a9.zip |
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>
-rw-r--r-- | org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/filter/PathFilterGroupTest.java | 13 | ||||
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/treewalk/filter/ByteArraySet.java | 2 |
2 files changed, 14 insertions, 1 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/filter/PathFilterGroupTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/filter/PathFilterGroupTest.java index 5267e81a15..8038206e9b 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/filter/PathFilterGroupTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/filter/PathFilterGroupTest.java @@ -135,6 +135,19 @@ public class PathFilterGroupTest { } @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 { // Obvious diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/treewalk/filter/ByteArraySet.java b/org.eclipse.jgit/src/org/eclipse/jgit/treewalk/filter/ByteArraySet.java index 0df24af24f..5a35359821 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/treewalk/filter/ByteArraySet.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/treewalk/filter/ByteArraySet.java @@ -88,7 +88,7 @@ class ByteArraySet { } 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]) |