Browse Source

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
stable-3.7
Christian Halstrick 10 years ago
parent
commit
3d17be85ba
  1. 2
      org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheTree.java

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

@ -425,7 +425,7 @@ public class DirCacheTree {
*/ */
void validate(final DirCacheEntry[] cache, final int cCnt, int cIdx, void validate(final DirCacheEntry[] cache, final int cCnt, int cIdx,
final int pathOff) { final int pathOff) {
if (entrySpan >= 0) { if (entrySpan >= 0 && cIdx + entrySpan <= cCnt) {
// If we are valid, our children are also valid. // If we are valid, our children are also valid.
// We have no need to validate them. // We have no need to validate them.
// //

Loading…
Cancel
Save