commit - c66ecbcb0a2490fb69c7a79d2b794fa9404c3053
commit + 8b31a0aefbf1931c90d3c61209474865e0695308
blob - 4b96e21f407d84ac399adbccb5d7e21cf86dad1f
blob + 1fe139974d76af32b2f41b225e9552489ebf6e6c
--- lib/got_lib_object_parse.h
+++ lib/got_lib_object_parse.h
struct got_tree_entry *got_alloc_tree_entry_partial(void);
const struct got_error *got_object_parse_commit(struct got_commit_object **,
- char *, size_t);
+ char *, size_t, enum got_hash_algorithm);
const struct got_error *got_object_read_commit(struct got_commit_object **, int,
struct got_object_id *, size_t);
uint8_t *id; /* Points to ID in parsed tree buffer. */
};
const struct got_error *got_object_parse_tree(struct got_parsed_tree_entry **,
- size_t *, size_t *, uint8_t *, size_t);
+ size_t *, size_t *, uint8_t *, size_t, enum got_hash_algorithm);
const struct got_error *got_object_read_tree(struct got_parsed_tree_entry **,
size_t *, size_t *, uint8_t **, int, struct got_object_id *);
const struct got_error *got_object_parse_tag(struct got_tag_object **,
- uint8_t *, size_t);
+ uint8_t *, size_t, enum got_hash_algorithm);
const struct got_error *got_object_read_tag(struct got_tag_object **, int,
struct got_object_id *, size_t);
const struct got_error *got_read_file_to_mem(uint8_t **, size_t *, FILE *);
blob - dece96df83ffd3846c7dbb45a31b59171112c076
blob + deb94475fe1cd9aa0df4c4f90358ba1fcb08d57b
--- lib/object_open_io.c
+++ lib/object_open_io.c
got_object_close(obj);
if (err)
goto done;
- err = got_object_parse_commit(commit, buf, len);
+ err = got_object_parse_commit(commit, buf, len, id->algo);
free(buf);
} else if (err->code == GOT_ERR_NO_OBJ) {
int fd;
if (err)
goto done;
err = got_object_parse_tree(&entries, &nentries,
- &nentries_alloc, buf, len);
+ &nentries_alloc, buf, len, id->algo);
if (err)
goto done;
} else if (err->code == GOT_ERR_NO_OBJ) {
got_object_close(obj);
if (err)
goto done;
- err = got_object_parse_tag(tag, buf, len);
+ err = got_object_parse_tag(tag, buf, len, id->algo);
free(buf);
} else if (err->code == GOT_ERR_NO_OBJ) {
int fd;
blob - 85cda810ac9020610cbd80274138c726f819350c
blob + f97fe014b8a77fe7922a580d07e131817cf8074d
--- lib/object_parse.c
+++ lib/object_parse.c
const struct got_error *
got_object_parse_commit(struct got_commit_object **commit, char *buf,
- size_t len)
+ size_t len, enum got_hash_algorithm algo)
{
const struct got_error *err = NULL;
- enum got_hash_algorithm algo = GOT_HASH_SHA1;
char *s = buf;
size_t label_len, idlen;
ssize_t remain = (ssize_t)len;
/* Skip object header. */
len -= obj->hdrlen;
- err = got_object_parse_commit(commit, p + obj->hdrlen, len);
+ err = got_object_parse_commit(commit, p + obj->hdrlen, len,
+ GOT_HASH_SHA1);
done:
free(p);
if (obj)
static const struct got_error *
parse_tree_entry(struct got_parsed_tree_entry *pte, size_t *elen, char *buf,
- size_t maxlen)
+ size_t maxlen, size_t idlen)
{
char *p, *space;
p++;
}
- if (*elen > maxlen || maxlen - *elen < SHA1_DIGEST_LENGTH)
+ if (*elen > maxlen || maxlen - *elen < idlen)
return got_error(GOT_ERR_BAD_OBJ_DATA);
pte->name = space + 1;
pte->namelen = strlen(pte->name);
buf += *elen;
pte->id = buf;
- *elen += SHA1_DIGEST_LENGTH;
+ // pte->idlen = idlen;
+ *elen += idlen;
return NULL;
}
const struct got_error *
got_object_parse_tree(struct got_parsed_tree_entry **entries, size_t *nentries,
- size_t *nentries_alloc, uint8_t *buf, size_t len)
+ size_t *nentries_alloc, uint8_t *buf, size_t len,
+ enum got_hash_algorithm algo)
{
const struct got_error *err = NULL;
size_t remain = len;
}
pte = &(*entries)[*nentries];
- err = parse_tree_entry(pte, &elen, buf, remain);
+ err = parse_tree_entry(pte, &elen, buf, remain,
+ got_hash_digest_length(algo));
if (err)
goto done;
buf += elen;
/* Skip object header. */
len -= obj->hdrlen;
err = got_object_parse_tree(entries, nentries, nentries_alloc,
- *p + obj->hdrlen, len);
+ *p + obj->hdrlen, len, GOT_HASH_SHA1);
done:
if (obj)
got_object_close(obj);
}
const struct got_error *
-got_object_parse_tag(struct got_tag_object **tag, uint8_t *buf, size_t len)
+got_object_parse_tag(struct got_tag_object **tag, uint8_t *buf, size_t len,
+ enum got_hash_algorithm algo)
{
const struct got_error *err = NULL;
- enum got_hash_algorithm algo = GOT_HASH_SHA1;
size_t remain = len;
char *s = buf;
size_t label_len, id_len;
/* Skip object header. */
len -= obj->hdrlen;
- err = got_object_parse_tag(tag, p + obj->hdrlen, len);
+ err = got_object_parse_tag(tag, p + obj->hdrlen, len,
+ GOT_HASH_SHA1);
done:
free(p);
if (obj)
blob - ca7cac34bcd12c5df8c223e410917d4fb6bb151a
blob + 06caa68133ea0151e72d46cf3e44f50b61304883
--- libexec/got-read-pack/got-read-pack.c
+++ libexec/got-read-pack/got-read-pack.c
obj->size = len;
- err = got_object_parse_commit(commit, buf, len);
+ err = got_object_parse_commit(commit, buf, len, GOT_HASH_SHA1);
done:
got_object_close(obj);
free(buf);
obj->size = len;
err = got_object_parse_tree(entries, nentries, nentries_alloc,
- *buf, len);
+ *buf, len, GOT_HASH_SHA1);
done:
got_object_close(obj);
if (err) {
goto done;
obj->size = len;
- err = got_object_parse_tag(&tag, buf, len);
+ err = got_object_parse_tag(&tag, buf, len, GOT_HASH_SHA1);
if (err)
goto done;
if (err)
goto done;
obj->size = len;
- err = got_object_parse_tag(&tag, buf, len);
+ err = got_object_parse_tag(&tag, buf, len,
+ GOT_HASH_SHA1);
if (err) {
free(buf);
goto done;