]> source.dussan.org Git - jgit.git/commitdiff
Handle invalid tree extensions 39/40339/1
authorChristian Halstrick <christian.halstrick@sap.com>
Mon, 26 Jan 2015 10:12:27 +0000 (11:12 +0100)
committerChristian Halstrick <christian.halstrick@sap.com>
Mon, 26 Jan 2015 10:16:53 +0000 (11:16 +0100)
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

org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheTree.java

index 5acde4385ebf5d24b39cbe8a649c5053b60b52ec..30932e827476360d741ac638873be8db3f2b67d1 100644 (file)
@@ -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.
                        //