Avoid unbounded getCachedBytes during parseAny
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>
This commit is contained in:
parent
e4a480f658
commit
412ca65bd5
|
@ -746,12 +746,11 @@ public RevObject parseAny(final AnyObjectId id)
|
|||
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 RevObject parseAny(final AnyObjectId id)
|
|||
}
|
||||
case Constants.OBJ_TAG: {
|
||||
final RevTag t = new RevTag(id);
|
||||
t.parseCanonical(this, data);
|
||||
t.parseCanonical(this, ldr.getCachedBytes());
|
||||
r = t;
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue