Commit e7fac2af238ec1eff706d6605985ee5bdfaeb2ea

lhchavez 2017-12-09T05:26:27

Using unsigned instead

diff --git a/src/pack.c b/src/pack.c
index 1b88835..e0a3938 100644
--- a/src/pack.c
+++ b/src/pack.c
@@ -934,18 +934,20 @@ git_off_t get_delta_base(
 	if (type == GIT_OBJ_OFS_DELTA) {
 		unsigned used = 0;
 		unsigned char c = base_info[used++];
-		base_offset = c & 127;
+		size_t unsigned_base_offset = c & 127;
 		while (c & 128) {
 			if (left <= used)
 				return GIT_EBUFS;
-			base_offset += 1;
-			if (!base_offset || MSB(base_offset, 8))
+			unsigned_base_offset += 1;
+			if (!unsigned_base_offset || MSB(unsigned_base_offset, 7))
 				return 0; /* overflow */
 			c = base_info[used++];
-			base_offset = (base_offset << 7) + (c & 127);
+			unsigned_base_offset = (unsigned_base_offset << 7) + (c & 127);
 		}
-		base_offset = delta_obj_offset - base_offset;
-		if (base_offset <= 0 || base_offset >= delta_obj_offset)
+		if ((size_t)delta_obj_offset <= unsigned_base_offset)
+			return 0; /* out of bound */
+		base_offset = delta_obj_offset - unsigned_base_offset;
+		if (base_offset >= delta_obj_offset)
 			return 0; /* out of bound */
 		*curpos += used;
 	} else if (type == GIT_OBJ_REF_DELTA) {