]> source.dussan.org Git - jgit.git/commitdiff
Avoid unbounded getCachedBytes during parseAny 44/1044/2
authorShawn O. Pearce <spearce@spearce.org>
Fri, 2 Jul 2010 22:05:32 +0000 (15:05 -0700)
committerShawn O. Pearce <spearce@spearce.org>
Sat, 3 Jul 2010 17:54:30 +0000 (10:54 -0700)
Since we don't know the type of object we are parsing, we don't
know if its a massive blob, or some small commit or annotated tag.
Avoid pulling the cached bytes until we have checked the type and
decided if we actually need them to continue parsing right now.

This way large blobs which won't fit in memory and would throw
a LargeObjectException don't abort parsing.

Change-Id: Ifb70df5d1c59f616aa20ee88898cb69524541636
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevWalk.java

index 51de7c4a51be00f22a0ac625124560c002827c09..1236ac6485af7c6f9bc355a6839988656313efb7 100644 (file)
@@ -746,12 +746,11 @@ public class RevWalk implements Iterable<RevCommit> {
                RevObject r = objects.get(id);
                if (r == null) {
                        final ObjectLoader ldr = reader.open(id);
-                       final byte[] data = ldr.getCachedBytes();
                        final int type = ldr.getType();
                        switch (type) {
                        case Constants.OBJ_COMMIT: {
                                final RevCommit c = createCommit(id);
-                               c.parseCanonical(this, data);
+                               c.parseCanonical(this, ldr.getCachedBytes());
                                r = c;
                                break;
                        }
@@ -767,7 +766,7 @@ public class RevWalk implements Iterable<RevCommit> {
                        }
                        case Constants.OBJ_TAG: {
                                final RevTag t = new RevTag(id);
-                               t.parseCanonical(this, data);
+                               t.parseCanonical(this, ldr.getCachedBytes());
                                r = t;
                                break;
                        }