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

5 messages from 2025-03-18 to 2025-03-21. Participants: Jensen Huang, Patrick Steinhardt, gtXfined H., Junio C Hamano.
Thread: https://gitlist.dev/t/63150

## Jensen Huang, 2025-03-18 11:16

Subject: [PATCH] index-pack, unpack-objects: restore missing ->init_fn
Message-ID: <20250318111616.113941-1-hmz007@gmail.com>
URL: https://gitlist.dev/e/20250318111616.113941-1-hmz007%40gmail.com

```
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(+)

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, 2025-03-19 09:32

Subject: Re: [PATCH] index-pack, unpack-objects: restore missing ->init_fn
Message-ID: <Z9qPMvclpdEIjQ3l@pks.im>
URL: https://gitlist.dev/e/Z9qPMvclpdEIjQ3l%40pks.im
In-Reply-To: <20250318111616.113941-1-hmz007@gmail.com>

```
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!

Patrick

```

## gtXfined H., 2025-03-19 11:53

Subject: Re: [PATCH] index-pack, unpack-objects: restore missing ->init_fn
Message-ID: <CAGr7CZnNdTsUuJU+Z8HBX6wQu_HF-faDPPhuLx7u-Y=TGeop+w@mail.gmail.com>
URL: https://gitlist.dev/e/CAGr7CZnNdTsUuJU%2BZ8HBX6wQu_HF-faDPPhuLx7u-Y%3DTGeop%2Bw%40mail.gmail.com
In-Reply-To: <Z9qPMvclpdEIjQ3l@pks.im>

```
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!

BR,
Jensen

```

## Patrick Steinhardt, 2025-03-19 13:12

Subject: Re: [PATCH] index-pack, unpack-objects: restore missing ->init_fn
Message-ID: <Z9rC0VCbh8Noaq4e@pks.im>
URL: https://gitlist.dev/e/Z9rC0VCbh8Noaq4e%40pks.im
In-Reply-To: <CAGr7CZnNdTsUuJU+Z8HBX6wQu_HF-faDPPhuLx7u-Y=TGeop+w@mail.gmail.com>

```
On Wed, Mar 19, 2025 at 07:53:36PM +0800, gtXfined H. wrote:
> 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, 2025-03-21 06:11

Subject: Re: [PATCH] index-pack, unpack-objects: restore missing ->init_fn
Message-ID: <xmqq4izmx68u.fsf@gitster.g>
URL: https://gitlist.dev/e/xmqq4izmx68u.fsf%40gitster.g
In-Reply-To: <Z9rC0VCbh8Noaq4e@pks.im>

```
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.

```
