Commit a02fc2cd16b5d45466733a1c4f027def4f5ee24c

Carlos Martín Nieto 2011-05-24T15:24:45

index: correctly parse invalidated TREE extensions A TREE extension with an entry count of -1 means that it was invalidated and we should ignore it. Do so instead of returning an error. This fixes issue #202 Signed-off-by: Carlos Martín Nieto <cmn@elego.de>

diff --git a/src/index.c b/src/index.c
index 0da2e18..b49ed19 100644
--- a/src/index.c
+++ b/src/index.c
@@ -520,11 +520,20 @@ static int read_tree_internal(git_index_tree **out,
 
 	/* Blank-terminated ASCII decimal number of entries in this tree */
 	if (git__strtol32(&count, buffer, &buffer, 10) < GIT_SUCCESS ||
-		count < 0) {
+		count < -1) {
 		error = GIT_EOBJCORRUPTED;
 		goto exit;
 	}
 
+	/* Invalidated TREE. Free the tree but report success */
+	if (count == -1) {
+		buffer = buffer_end;
+		free_tree(tree); /* Needs to be done manually */
+		tree = NULL;
+		error = GIT_SUCCESS;
+		goto exit;
+	}
+
 	tree->entries = (size_t)count;
 
 	if (*buffer != ' ' || ++buffer >= buffer_end) {