From 4c49ab5a4ec8555681ceabf17142a15bf90c2c24 Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Tue, 30 Sep 2008 18:31:27 -0700 Subject: [PATCH] Fix UnpackedObjectLoader.getBytes to return a copy The contract for ObjectLoader.getBytes() says the caller can modify the returned array. UnpackedObjectLoader must copy the data and not return its internal cached byte array. Signed-off-by: Shawn O. Pearce Signed-off-by: Robin Rosenberg --- org.spearce.jgit/src/org/spearce/jgit/lib/ObjectLoader.java | 7 ++++++- org.spearce.jgit/src/org/spearce/jgit/lib/PackedObjectLoader.java | 7 ------- .../src/org/spearce/jgit/lib/UnpackedObjectLoader.java | 4 ---- 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/ObjectLoader.java b/org.spearce.jgit/src/org/spearce/jgit/lib/ObjectLoader.java index 5282491b..87e861fd 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/lib/ObjectLoader.java +++ b/org.spearce.jgit/src/org/spearce/jgit/lib/ObjectLoader.java @@ -105,7 +105,12 @@ public abstract class ObjectLoader { * @throws IOException * the object cannot be read. */ - public abstract byte[] getBytes() throws IOException; + public final byte[] getBytes() throws IOException { + final byte[] data = getCachedBytes(); + final byte[] copy = new byte[data.length]; + System.arraycopy(data, 0, copy, 0, data.length); + return data; + } /** * Obtain a reference to the (possibly cached) bytes of this object. diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/PackedObjectLoader.java b/org.spearce.jgit/src/org/spearce/jgit/lib/PackedObjectLoader.java index fa414d61..35983fe0 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/lib/PackedObjectLoader.java +++ b/org.spearce.jgit/src/org/spearce/jgit/lib/PackedObjectLoader.java @@ -80,13 +80,6 @@ abstract class PackedObjectLoader extends ObjectLoader { return dataOffset; } - public final byte[] getBytes() throws IOException { - final byte[] data = getCachedBytes(); - final byte[] copy = new byte[data.length]; - System.arraycopy(data, 0, copy, 0, data.length); - return data; - } - /** * Copy raw object representation from storage to provided output stream. *

diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/UnpackedObjectLoader.java b/org.spearce.jgit/src/org/spearce/jgit/lib/UnpackedObjectLoader.java index 3c612548..3ad273f8 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/lib/UnpackedObjectLoader.java +++ b/org.spearce.jgit/src/org/spearce/jgit/lib/UnpackedObjectLoader.java @@ -200,10 +200,6 @@ public class UnpackedObjectLoader extends ObjectLoader { return objectSize; } - public byte[] getBytes() { - return bytes; - } - @Override public byte[] getCachedBytes() throws IOException { return bytes; -- 2.11.4.GIT