threads / patch / 63150

patchindex-pack, unpack-objects: restore missing ->init_fn

Subject: [PATCH] index-pack, unpack-objects: restore missing ->init_fn

## tl;dr

5 messages between Mar 18, 2025 and Mar 21, 2025. Diffs are folded; open one to read it.

replies: 4people: 3as markdown or json

Jensen Huang· Mar 18, 2025, 11:16 UTC · lore

Commit 0578f1e66a ("global: adapt callers to use generic hash context helpers") accidentally removed `->init_fn`, which is required for OpenSSL 3+ SHA1.

This fixes the following error on fetch:
  fatal: fetch-pack: invalid index-pack output
Signed-off-by: Jensen Huang <hmz007@gmail.com>
---
 builtin/index-pack.c     | 1 +
 builtin/unpack-objects.c | 1 +
 2 files changed, 2 insertions(+)
Show changes to 2 files +2 −0

builtin/index-pack.c, builtin/unpack-objects.c

diff --git a/builtin/index-pack.c b/builtin/index-pack.c
index 52cc97d52c..50573ba049 100644
--- a/builtin/index-pack.c
+++ b/builtin/index-pack.c
@@ -1286,6 +1286,7 @@ static void parse_pack_objects(unsigned char *hash)
 
 	/* Check pack integrity */
 	flush();
+	the_hash_algo->init_fn(&tmp_ctx);
 	git_hash_clone(&tmp_ctx, &input_ctx);
 	git_hash_final(hash, &tmp_ctx);
 	if (!hasheq(fill(the_hash_algo->rawsz), hash, the_repository->hash_algo))
diff --git a/builtin/unpack-objects.c b/builtin/unpack-objects.c
index 8383bcf404..c5a6dca856 100644
--- a/builtin/unpack-objects.c
+++ b/builtin/unpack-objects.c
@@ -668,6 +668,7 @@ int cmd_unpack_objects(int argc,
 	the_hash_algo->init_fn(&ctx);
 	unpack_all();
 	git_hash_update(&ctx, buffer, offset);
+	the_hash_algo->init_fn(&tmp_ctx);
 	git_hash_clone(&tmp_ctx, &ctx);
 	git_hash_final_oid(&oid, &tmp_ctx);
 	if (strict) {
-- 
2.49.0-1
Patrick Steinhardt· Mar 19, 2025, 09:32 UTC · re: Jensen Huang · lore

Re: [PATCH] index-pack, unpack-objects: restore missing ->init_fn

On Tue, Mar 18, 2025 at 07:16:10PM +0800, Jensen Huang wrote:
Show 5 quoted lines
> Commit 0578f1e66a ("global: adapt callers to use generic hash context helpers")
> accidentally removed `->init_fn`, which is required for OpenSSL 3+ SHA1.
> 
> This fixes the following error on fetch:
>   fatal: fetch-pack: invalid index-pack output

The change makes sense indeed. I do wonder though: can we maybe improve `git_hash_clone()` so that it is not required to initialize the context beforehand?

Thanks!
Patrick
gtXfined H.· Mar 19, 2025, 11:53 UTC · re: Patrick Steinhardt · lore

Re: [PATCH] index-pack, unpack-objects: restore missing ->init_fn

On Wed, Mar 19, 2025 at 5:32 PM Patrick Steinhardt <ps@pks.im> wrote:
Show 11 quoted lines
>
> On Tue, Mar 18, 2025 at 07:16:10PM +0800, Jensen Huang wrote:
> > Commit 0578f1e66a ("global: adapt callers to use generic hash context helpers")
> > accidentally removed `->init_fn`, which is required for OpenSSL 3+ SHA1.
> >
> > This fixes the following error on fetch:
> >   fatal: fetch-pack: invalid index-pack output
>
> The change makes sense indeed. I do wonder though: can we maybe improve
> `git_hash_clone()` so that it is not required to initialize the context
> beforehand?

Thanks for the review! The idea of improving git_hash_clone() so that it doesn't require explicit init_fn() calls sounds interesting. However, based on my current understanding of the code, I'm not sure how to implement this properly while ensuring it works correctly for all hash implementations. If you have any suggestions or guidance on how this could be approached, I'd appreciate the input!

BR, Jensen

Patrick Steinhardt· Mar 19, 2025, 13:12 UTC · re: gtXfined H. · lore

Re: [PATCH] index-pack, unpack-objects: restore missing ->init_fn

On Wed, Mar 19, 2025 at 07:53:36PM +0800, gtXfined H. wrote:
Show 21 quoted lines
> On Wed, Mar 19, 2025 at 5:32 PM Patrick Steinhardt <ps@pks.im> wrote:
> >
> > On Tue, Mar 18, 2025 at 07:16:10PM +0800, Jensen Huang wrote:
> > > Commit 0578f1e66a ("global: adapt callers to use generic hash context helpers")
> > > accidentally removed `->init_fn`, which is required for OpenSSL 3+ SHA1.
> > >
> > > This fixes the following error on fetch:
> > >   fatal: fetch-pack: invalid index-pack output
> >
> > The change makes sense indeed. I do wonder though: can we maybe improve
> > `git_hash_clone()` so that it is not required to initialize the context
> > beforehand?
> 
> Thanks for the review!
> The idea of improving git_hash_clone() so that it doesn't require
> explicit init_fn() calls sounds interesting. However, based on my
> current understanding of the code, I'm not sure how to implement this
> properly while ensuring it works correctly for all hash
> implementations.
> If you have any suggestions or guidance on how this could be
> approached, I'd appreciate the input!

Fair enough. I'm also fine with the patch as-is as it addresses the issue true to the original spirit. Improving `git_hash_clone()` would be an extra step that doesn't need to be part of this series, nor does it have to be you who implements it.

Thanks!
Patrick
Junio C Hamano· Mar 21, 2025, 06:11 UTC · re: Patrick Steinhardt · lore

Re: [PATCH] index-pack, unpack-objects: restore missing ->init_fn

Patrick Steinhardt <ps@pks.im> writes:
> Fair enough. I'm also fine with the patch as-is as it addresses the
> issue true to the original spirit. Improving `git_hash_clone()` would be
> an extra step that doesn't need to be part of this series, nor does it
> have to be you who implements it.
Sounds sensible.

← back to recent threads