threads / patch / 14215

patchPaper bag fix IndexPack thin pack completion support

Subject: [JGIT PATCH] Paper bag fix IndexPack thin pack completion support

## tl;dr

One message between Jun 30, 2008 and Jun 30, 2008. Diffs are folded; open one to read it.

replies: 0people: 1as markdown or json

Shawn O. Pearce· Jun 30, 2008, 01:25 UTC · lore

We must write the whole object at the end of the file, not in the middle of the file on top of some delta (or other) whole object. Writing in the middle of the file causes subtle corruption as we cannot unpack a delta.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
---
 This is a serious data corruption in IndexPack.  It was introduced
 by me in "Compute packed object entry CRC32 data during IndexPack",
 which is presently in `pu` as 4b8e1c0c.  It would be best if we
 squash this into the commit.
 .../src/org/spearce/jgit/transport/IndexPack.java  |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
Show changes to org.spearce.jgit/src/org/spearce/jgit/transport/IndexPack.java +1 −1
diff --git a/org.spearce.jgit/src/org/spearce/jgit/transport/IndexPack.java b/org.spearce.jgit/src/org/spearce/jgit/transport/IndexPack.java
index b35cec3..24a0577 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/transport/IndexPack.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/transport/IndexPack.java
@@ -407,10 +407,10 @@ public class IndexPack {
 			final PackedObjectInfo oe;
 
 			crc.reset();
+			packOut.seek(end);
 			writeWhole(def, typeCode, data);
 			oe = new PackedObjectInfo(end, (int) crc.getValue(), baseId);
 			entries[entryCount++] = oe;
-			packOut.seek(end);
 			end = packOut.getFilePointer();
 
 			resolveChildDeltas(oe.getOffset(), typeCode, data, oe);
-- 
1.5.6.74.g8a5e

-- 
Shawn.

← back to recent threads