]> source.dussan.org Git - jgit.git/commitdiff
Ensure all deltas were resolved in a pack 93/2293/2
authorShawn O. Pearce <spearce@spearce.org>
Wed, 19 Jan 2011 01:14:15 +0000 (17:14 -0800)
committerChris Aniszczyk <caniszczyk@gmail.com>
Tue, 25 Jan 2011 22:52:22 +0000 (16:52 -0600)
If a pack uses OFS_DELTA only (e.g. its an initial push to a
repository) and PackParser's implementation is broken such that the
delta chain that hangs below a particular object offset is empty, the
entryCount won't match the expected objectCount. Fail fast rather
than claiming the stream was parsed correctly.

The current implementation is not broken as described above.  I broke
the code when I implemented my own new subclass of PackParser (which
incorrectly mucked with the object offset information), leading me to
discover this consistency check was missing.

Change-Id: I07540f0ae1144ef6f3bda48774dbdefb8876e1d3
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
org.eclipse.jgit/src/org/eclipse/jgit/transport/PackParser.java

index 54e7dd989fb2eb95b3ea0964870f83341472fc79..06819d3efe77d465913b711ef57bb2100c0c9b31 100644 (file)
@@ -409,6 +409,12 @@ public abstract class PackParser {
                                        }
 
                                        resolveDeltasWithExternalBases(progress);
+
+                                       if (entryCount < objectCount) {
+                                               throw new IOException(MessageFormat.format(JGitText
+                                                               .get().packHasUnresolvedDeltas,
+                                                               (objectCount - entryCount)));
+                                       }
                                }
                        }