From 4e187d898aac18c705b3ab6699745c6460e82ae6 Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Fri, 4 Mar 2011 18:56:16 -0800 Subject: [PATCH] PackFile: Fix copy as-is for small objects When I disabled validation I broke the code that handled copying small objects whose contents were below 8192 bytes in size but spanned over the end of one window and into the next window. These objects did not ever populate the temporary write buffer, resulting in garbage writing into the output stream instead of valid object contents. Change-Id: Ie26a2aaa885d0eee4888a9b12c222040ee4a8562 Signed-off-by: Shawn O. Pearce --- .../src/org/eclipse/jgit/storage/file/PackFile.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/PackFile.java b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/PackFile.java index d8d986fb04..2bf8160e28 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/PackFile.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/PackFile.java @@ -468,6 +468,16 @@ public class PackFile implements Iterable { // Tiny optimization: Lots of objects are very small deltas or // deflated commits that are likely to fit in the copy buffer. // + if (!validate) { + long pos = dataOffset; + long cnt = dataLength; + while (cnt > 0) { + final int n = (int) Math.min(cnt, buf.length); + readFully(pos, buf, 0, n, curs); + pos += n; + cnt -= n; + } + } out.writeHeader(src, inflatedLength); out.write(buf, 0, (int) dataLength); } else { -- 2.39.5