]> source.dussan.org Git - jgit.git/commitdiff
Fix reuse from pack file for REF_DELTA types 26/1426/1
authorShawn O. Pearce <spearce@spearce.org>
Wed, 25 Aug 2010 23:46:43 +0000 (16:46 -0700)
committerShawn O. Pearce <spearce@spearce.org>
Thu, 26 Aug 2010 00:07:13 +0000 (17:07 -0700)
We miscomputed the CRC32 checksum for a REF_DELTA type of object, by
not including the full 20 byte ObjectId of the delta base in the CRC
code we use when the delta is too large to go through our two faster
small reuse code paths.  This resulted in a corruption error during
packing, where the PackFile erroneously suspected the data was wrong
on the local filesystem and aborted writing, because the CRC didn't
match what we had read from the index.

Change-Id: I7d12cdaeaf2c83ddc11223ce0108d9bd6886e025
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
org.eclipse.jgit/src/org/eclipse/jgit/storage/file/PackFile.java

index 99637ee6173574cc9a8d97d7f09e073d99a9fa02..ed159ef389f6fdb69e6808c4ed0aea21ebbcc6b3 100644 (file)
@@ -334,7 +334,7 @@ public class PackFile implements Iterable<PackIndex.MutableEntry> {
 
                        readFully(src.offset + headerCnt, buf, 0, 20, curs);
                        crc1.update(buf, 0, 20);
-                       crc2.update(buf, 0, headerCnt);
+                       crc2.update(buf, 0, 20);
                        headerCnt += 20;
                } else {
                        crc1.update(buf, 0, headerCnt);