diff options
author | Christian Halstrick <christian.halstrick@sap.com> | 2015-01-26 11:12:27 +0100 |
---|---|---|
committer | Christian Halstrick <christian.halstrick@sap.com> | 2015-01-26 11:16:53 +0100 |
commit | 3d17be85bac795d7da3caa15b5b09adb46052584 (patch) | |
tree | 985cf55b3377516ce048d2e6511631f5720c4886 /org.eclipse.jgit | |
parent | e314e42d41cca60748a5f4e6dec1682bdb8bdbe4 (diff) | |
download | jgit-3d17be85bac795d7da3caa15b5b09adb46052584.tar.gz jgit-3d17be85bac795d7da3caa15b5b09adb46052584.zip |
Handle invalid tree extensions
In case the index contains wrong tree extensions don't throw a
ArrayIndexOutOfBounds exception but revalidate the tree extension.
It happened that the git index written by Git for Windows contained valid
(means entryCount>0) tree extensions for pathes which are not existing
in the index. Native git handles this inconsistency silently but JGit
was crashing with a ArrayIndexOutOfBounds exception. Teach JGit to
better recognize such cases and revalidate such extensions.
It's hard to write a test because JGit doesn't write such extensions. It
only reads, validates and makes use of them. But the bug tells how to
create such situations.
Bug: 457152
Change-Id: Id3ffd7dc7ae1c55674d88bf1b43953234fe0b68d
Diffstat (limited to 'org.eclipse.jgit')
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheTree.java | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheTree.java b/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheTree.java index 5acde4385e..30932e8274 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheTree.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheTree.java @@ -425,7 +425,7 @@ public class DirCacheTree { */ void validate(final DirCacheEntry[] cache, final int cCnt, int cIdx, final int pathOff) { - if (entrySpan >= 0) { + if (entrySpan >= 0 && cIdx + entrySpan <= cCnt) { // If we are valid, our children are also valid. // We have no need to validate them. // |