Fix bugs in TreeWalk#isPathSuffix used by PathSuffixFilter
* It didn't check the first character in the pattern due to a off-by-one error. Spotted by James Roper. * It returned true even when pattern was longer than current path, e.g. it returned that ".txt" is suffix of "txt". Bug: 411999 Change-Id: I9fbcd68a11fb57cc49956b70c387a47271a0424f Signed-off-by: Robin Stocker <robin@nibor.org>
This commit is contained in:
parent
c222b18808
commit
c128100800
|
@ -82,6 +82,16 @@ public void testRecursiveFiltering() throws IOException {
|
|||
assertEquals(expected, paths);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEdgeCases() throws IOException {
|
||||
ObjectId treeId = createTree("abc", "abcd", "bcd", "c");
|
||||
assertEquals(new ArrayList<String>(), getMatchingPaths("xbcd", treeId));
|
||||
assertEquals(new ArrayList<String>(), getMatchingPaths("abcx", treeId));
|
||||
assertEquals(Arrays.asList("abcd"), getMatchingPaths("abcd", treeId));
|
||||
assertEquals(Arrays.asList("abcd", "bcd"), getMatchingPaths("bcd", treeId));
|
||||
assertEquals(Arrays.asList("abc", "c"), getMatchingPaths("c", treeId));
|
||||
}
|
||||
|
||||
private ObjectId createTree(String... paths) throws IOException {
|
||||
final ObjectInserter odi = db.newObjectInserter();
|
||||
final DirCache dc = db.readDirCache();
|
||||
|
|
|
@ -835,13 +835,17 @@ public boolean isPathSuffix(final byte[] p, final int pLen) {
|
|||
final AbstractTreeIterator t = currentHead;
|
||||
final byte[] c = t.path;
|
||||
final int cLen = t.pathLen;
|
||||
int ci;
|
||||
|
||||
for (ci = 1; ci < cLen && ci < pLen; ci++) {
|
||||
if (c[cLen-ci] != p[pLen-ci])
|
||||
for (int i = 1; i <= pLen; i++) {
|
||||
// Pattern longer than current path
|
||||
if (i > cLen)
|
||||
return false;
|
||||
// Current path doesn't match pattern
|
||||
if (c[cLen - i] != p[pLen - i])
|
||||
return false;
|
||||
}
|
||||
|
||||
// Whole pattern tested -> matches
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue