commit - 8fdd8178257524a92d71c6b4a52984f8974f04df
commit + 243943f63dac33bd84f18ae5c81cff8f79d4b29f
blob - 3a7d1e49be0e4a6882f9313120d6973a76f063f9
blob + 0aafbffd522a53c07caf5219f5e6e6133d39d5eb
--- lib/object_parse.c
+++ lib/object_parse.c
{
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);
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;
}
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;
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;
}
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);
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)
pte = &(*entries)[*nentries];
err = got_object_parse_tree_entry(pte, &elen, buf, remain,
- idlen);
+ digest_len);
if (err)
goto done;
buf += elen;
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);
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;
}
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
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)
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);
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;
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
{
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;
}