Download raw body.
ensure we properly zero got_object_id structs
On Thu, Jul 11, 2024 at 03:02:18PM +0200, Omar Polo wrote:
> I need this in my tree, especially the second part, to not break
> everything horribly when extending the got_object_id struct. The
> fileindex and worktree code (at least) are not yet ready for sha256, but
> this allows them to continue working, at least in my testing.
>
> The first part is to not break gotd. There are several places in gotd
> where we just copy stuff in/out the sha1 buffer, and those should also
> continue to work. (sha256 in the network protocol is pretty down the
> todo list :/)
>
> ok?
>
> diff /home/op/w/got
> commit - 03a62f6dd737910257cd4602766adca863cc8811
> path + /home/op/w/got
> blob - 6c9c61a414a0d5c844ce86e60e9544b213cd637c
> file + gotd/session_write.c
> --- gotd/session_write.c
> +++ gotd/session_write.c
> @@ -696,7 +696,9 @@ update_ref(int *shut, struct gotd_session_client *clie
>
> log_debug("updating ref %s for uid %d", refname, client->euid);
>
> + memset(&old_id, 0, sizeof(old_id));
> memcpy(old_id.sha1, iref.old_id, SHA1_DIGEST_LENGTH);
> + memset(&new_id, 0, sizeof(new_id));
> memcpy(new_id.sha1, iref.new_id, SHA1_DIGEST_LENGTH);
> err = got_repo_find_object_id(iref.delete_ref ? &old_id : &new_id,
> repo);
ok for the above gotd bits.
> blob - e4574472a88375bfac44ed049b2e5050ad77a389
> file + lib/object_qid.c
> --- lib/object_qid.c
> +++ lib/object_qid.c
> @@ -31,7 +31,7 @@
> const struct got_error *
> got_object_qid_alloc_partial(struct got_object_qid **qid)
> {
> - *qid = malloc(sizeof(**qid));
> + *qid = calloc(1, sizeof(**qid));
This change defeats the purpose of "partial" allocation.
This function assumes callers will initialize other fields not
touched by this function. It's a hot-path micro-optimization.
I am not sure if it is still needed, it may come from a time
when parsed tree entries were a linked-list instead of an array.
Would it be enough to keep malloc and set the hash algo field,
with a TODO comment saying callers should set the algo?
> if (*qid == NULL)
> return got_error_from_errno("malloc");
Would need to change to calloc here as well if calloc is the only
viable solution.
ensure we properly zero got_object_id structs