Commit ec7e680c6c56897bc0881cbcd14c2f1e9ac624c5

Ravindra Patel 2014-11-20T12:07:55

Fix for misleading "missing delta bases" error - Fix #2721.

diff --git a/src/indexer.c b/src/indexer.c
index 0e682dd..8127ff8 100644
--- a/src/indexer.c
+++ b/src/indexer.c
@@ -671,8 +671,10 @@ static int inject_object(git_indexer *idx, git_oid *id)
 	seek_back_trailer(idx);
 	entry_start = idx->pack->mwf.size;
 
-	if (git_odb_read(&obj, idx->odb, id) < 0)
+	if (git_odb_read(&obj, idx->odb, id) < 0) {
+		giterr_set(GITERR_INDEXER, "missing delta bases");
 		return -1;
+	}
 
 	data = git_odb_object_data(obj);
 	len = git_odb_object_size(obj);
@@ -827,7 +829,6 @@ static int resolve_deltas(git_indexer *idx, git_transfer_progress *stats)
 			break;
 
 		if (!progressed && (fix_thin_pack(idx, stats) < 0)) {
-			giterr_set(GITERR_INDEXER, "missing delta bases");
 			return -1;
 		}
 	}
diff --git a/src/pack.c b/src/pack.c
index 7903238..df25631 100644
--- a/src/pack.c
+++ b/src/pack.c
@@ -408,11 +408,14 @@ static int packfile_unpack_header1(
 	size = c & 15;
 	shift = 4;
 	while (c & 0x80) {
-		if (len <= used)
+		if (len <= used) {
+			giterr_set(GITERR_ODB, "buffer too small");
 			return GIT_EBUFS;
+		}
 
 		if (bitsizeof(long) <= shift) {
 			*usedp = 0;
+			giterr_set(GITERR_ODB, "packfile corrupted");
 			return -1;
 		}