Commit Diff


commit - 8fdd8178257524a92d71c6b4a52984f8974f04df
commit + 243943f63dac33bd84f18ae5c81cff8f79d4b29f
blob - 3a7d1e49be0e4a6882f9313120d6973a76f063f9
blob + 0aafbffd522a53c07caf5219f5e6e6133d39d5eb
--- lib/object_parse.c
+++ lib/object_parse.c
@@ -576,8 +576,10 @@ got_object_parse_commit(struct got_commit_object **com
 {
 	const struct got_error *err = NULL;
 	char *s = buf;
-	size_t label_len;
+	size_t label_len, digest_string_len;
 	ssize_t remain = (ssize_t)len;
+
+	digest_string_len = got_hash_digest_string_length(algo);
 
 	if (remain == 0)
 		return got_error(GOT_ERR_BAD_OBJ_DATA);
@@ -589,7 +591,7 @@ got_object_parse_commit(struct got_commit_object **com
 	label_len = strlen(GOT_COMMIT_LABEL_TREE);
 	if (strncmp(s, GOT_COMMIT_LABEL_TREE, label_len) == 0) {
 		remain -= label_len;
-		if (remain < SHA1_DIGEST_STRING_LENGTH) {
+		if (remain < digest_string_len) {
 			err = got_error(GOT_ERR_BAD_OBJ_DATA);
 			goto done;
 		}
@@ -598,8 +600,8 @@ got_object_parse_commit(struct got_commit_object **com
 			err = got_error(GOT_ERR_BAD_OBJ_DATA);
 			goto done;
 		}
-		remain -= SHA1_DIGEST_STRING_LENGTH;
-		s += SHA1_DIGEST_STRING_LENGTH;
+		remain -= digest_string_len;
+		s += digest_string_len;
 	} else {
 		err = got_error(GOT_ERR_BAD_OBJ_DATA);
 		goto done;
@@ -608,7 +610,7 @@ got_object_parse_commit(struct got_commit_object **com
 	label_len = strlen(GOT_COMMIT_LABEL_PARENT);
 	while (strncmp(s, GOT_COMMIT_LABEL_PARENT, label_len) == 0) {
 		remain -= label_len;
-		if (remain < SHA1_DIGEST_STRING_LENGTH) {
+		if (remain < digest_string_len) {
 			err = got_error(GOT_ERR_BAD_OBJ_DATA);
 			goto done;
 		}
@@ -617,8 +619,8 @@ got_object_parse_commit(struct got_commit_object **com
 		if (err)
 			goto done;
 
-		remain -= SHA1_DIGEST_STRING_LENGTH;
-		s += SHA1_DIGEST_STRING_LENGTH;
+		remain -= digest_string_len;
+		s += digest_string_len;
 	}
 
 	label_len = strlen(GOT_COMMIT_LABEL_AUTHOR);
@@ -811,12 +813,12 @@ got_object_parse_tree(struct got_parsed_tree_entry **e
     enum got_hash_algorithm algo)
 {
 	const struct got_error *err = NULL;
-	size_t idlen, remain = len;
+	size_t digest_len, remain = len;
 	const size_t nalloc = 16;
 	struct got_parsed_tree_entry *pte;
 	int i;
 
-	idlen = got_hash_digest_length(algo);
+	digest_len = got_hash_digest_length(algo);
 
 	*nentries = 0;
 	if (remain == 0)
@@ -838,7 +840,7 @@ got_object_parse_tree(struct got_parsed_tree_entry **e
 
 		pte = &(*entries)[*nentries];
 		err = got_object_parse_tree_entry(pte, &elen, buf, remain,
-			idlen);
+			digest_len);
 		if (err)
 			goto done;
 		buf += elen;
@@ -937,7 +939,9 @@ got_object_parse_tag(struct got_tag_object **tag, uint
 	const struct got_error *err = NULL;
 	size_t remain = len;
 	char *s = buf;
-	size_t label_len;
+	size_t label_len, digest_string_len;
+
+	digest_string_len = got_hash_digest_string_length(algo);
 
 	if (remain == 0)
 		return got_error(GOT_ERR_BAD_OBJ_DATA);
@@ -949,7 +953,7 @@ got_object_parse_tag(struct got_tag_object **tag, uint
 	label_len = strlen(GOT_TAG_LABEL_OBJECT);
 	if (strncmp(s, GOT_TAG_LABEL_OBJECT, label_len) == 0) {
 		remain -= label_len;
-		if (remain < SHA1_DIGEST_STRING_LENGTH) {
+		if (remain < digest_string_len) {
 			err = got_error(GOT_ERR_BAD_OBJ_DATA);
 			goto done;
 		}
@@ -958,8 +962,8 @@ got_object_parse_tag(struct got_tag_object **tag, uint
 			err = got_error(GOT_ERR_BAD_OBJ_DATA);
 			goto done;
 		}
-		remain -= SHA1_DIGEST_STRING_LENGTH;
-		s += SHA1_DIGEST_STRING_LENGTH;
+		remain -= digest_string_len;
+		s += digest_string_len;
 	} else {
 		err = got_error(GOT_ERR_BAD_OBJ_DATA);
 		goto done;
blob - 5d128736fd8cc8b24a9e2f8fd6edd0d243752fcc
blob + 2a64424df931938a52b2dbc73af82948e7aec145
--- lib/pack_index.c
+++ lib/pack_index.c
@@ -157,11 +157,14 @@ read_packed_object(struct got_pack *pack, struct got_i
 	const char *obj_label;
 	size_t mapoff = obj->off;
 	struct got_inflate_checksum csum;
+	size_t digest_len;
 
 	memset(&csum, 0, sizeof(csum));
 	csum.input_ctx = pack_hash_ctx;
 	csum.input_crc = &obj->crc;
 
+	digest_len = got_hash_digest_length(pack->algo);
+
 	err = got_pack_parse_object_type_and_size(&obj->type, &obj->size,
 	    &obj->tslen, pack, obj->off);
 	if (err)
@@ -239,19 +242,19 @@ read_packed_object(struct got_pack *pack, struct got_i
 		free(data);
 		break;
 	case GOT_OBJ_TYPE_REF_DELTA:
-		memset(obj->id.sha1, 0xff, SHA1_DIGEST_LENGTH);
+		memset(obj->id.sha1, 0xff, digest_len);
 		if (pack->map) {
-			if (mapoff + SHA1_DIGEST_LENGTH >= pack->filesize) {
+			if (mapoff + digest_len >= pack->filesize) {
 				err = got_error(GOT_ERR_BAD_PACKFILE);
 				break;
 			}
 			memcpy(obj->delta.ref.ref_id.sha1, pack->map + mapoff,
-			    SHA1_DIGEST_LENGTH);
+			    digest_len);
 			obj->crc = crc32(obj->crc, pack->map + mapoff,
-			    SHA1_DIGEST_LENGTH);
+			    digest_len);
 			got_hash_update(pack_hash_ctx, pack->map + mapoff,
-			    SHA1_DIGEST_LENGTH);
-			mapoff += SHA1_DIGEST_LENGTH;
+			    digest_len);
+			mapoff += digest_len;
 			err = got_inflate_to_mem_mmap(NULL, &datalen,
 			    &obj->len, &csum, pack->map, mapoff,
 			    pack->filesize - mapoff);
@@ -259,7 +262,7 @@ read_packed_object(struct got_pack *pack, struct got_i
 				break;
 		} else {
 			n = read(pack->fd, obj->delta.ref.ref_id.sha1,
-			    SHA1_DIGEST_LENGTH);
+			    digest_len);
 			if (n == -1) {
 				err = got_error_from_errno("read");
 				break;
@@ -269,18 +272,18 @@ read_packed_object(struct got_pack *pack, struct got_i
 				break;
 			}
 			obj->crc = crc32(obj->crc, obj->delta.ref.ref_id.sha1,
-			    SHA1_DIGEST_LENGTH);
+			    digest_len);
 			got_hash_update(pack_hash_ctx,
-			    obj->delta.ref.ref_id.sha1, SHA1_DIGEST_LENGTH);
+			    obj->delta.ref.ref_id.sha1, digest_len);
 			err = got_inflate_to_mem_fd(NULL, &datalen, &obj->len,
 			    &csum, obj->size, pack->fd);
 			if (err)
 				break;
 		}
-		obj->len += SHA1_DIGEST_LENGTH;
+		obj->len += digest_len;
 		break;
 	case GOT_OBJ_TYPE_OFFSET_DELTA:
-		memset(obj->id.sha1, 0xff, SHA1_DIGEST_LENGTH);
+		memset(obj->id.sha1, 0xff, digest_len);
 		err = got_pack_parse_offset_delta(&obj->delta.ofs.base_offset,
 		    &obj->delta.ofs.base_offsetlen, pack, obj->off,
 		    obj->tslen);
blob - e25d7c6f309c6ab9ea5bd88e7e3dceab290ba031
blob + adbe1b7e6e30b6571e3c7c1324bf23fbe0132c21
--- lib/repository.c
+++ lib/repository.c
@@ -1964,15 +1964,16 @@ got_repo_match_object_id_prefix(struct got_object_id *
 {
 	const struct got_error *err = NULL;
 	char *path_objects = NULL, *object_dir = NULL;
-	size_t len;
+	size_t len, digest_string_len;
 	int i;
 
 	*id = NULL;
 
 	path_objects = got_repo_get_path_objects(repo);
+	digest_string_len = got_hash_digest_string_length(repo->algo);
 
 	len = strlen(id_str_prefix);
-	if (len > SHA1_DIGEST_STRING_LENGTH - 1) {
+	if (len > digest_string_len - 1) {
 		err = got_error_path(id_str_prefix, GOT_ERR_BAD_OBJ_ID_STR);
 		goto done;
 	}