# [PATCH] Don't die in git-http-fetch when fetching packs.

3 messages from 2007-01-10 to 2007-01-10. Participants: Shawn O. Pearce, Junio C Hamano.
Thread: https://gitlist.dev/t/6322

## Shawn O. Pearce, 2007-01-10 01:04

Subject: [PATCH] Don't die in git-http-fetch when fetching packs.
Message-ID: <20070110010452.GA30610@spearce.org>
URL: https://gitlist.dev/e/20070110010452.GA30610%40spearce.org

```
My sp/mmap changes to pack-check.c modified the function such that
it expects packed_git.pack_size to be populated with the total
bytecount of the packfile by the caller.

But that isn't the case for packs obtained by git-http-fetch as
pack_size was not initialized before being accessed.  This caused
verify_pack to think it had 2^32-21 bytes available when the
downloaded pack perhaps was only 305 bytes in length.  The use_pack
function then later dies with "offset beyond end of packfile"
when computing the overall file checksum.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
---

 For the tip of my sp/mmap topic.  Without it HTTP fetch and push
 support is severely broken as it cannot deal with packs.

 http-fetch.c |    1 +
 http-push.c  |    1 +
 2 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/http-fetch.c b/http-fetch.c
index fe8cd7b..67dfb0a 100644
--- a/http-fetch.c
+++ b/http-fetch.c
@@ -809,6 +809,7 @@ static int fetch_pack(struct alt_base *repo, unsigned char *sha1)
 		return error("Unable to start request");
 	}
 
+	target->pack_size = ftell(packfile);
 	fclose(packfile);
 
 	ret = move_temp_to_file(tmpfile, filename);
diff --git a/http-push.c b/http-push.c
index 7e73eac..8eb448e 100644
--- a/http-push.c
+++ b/http-push.c
@@ -770,6 +770,7 @@ static void finish_request(struct transfer_request *request)
 				request->url, curl_errorstr);
 			remote->can_update_info_refs = 0;
 		} else {
+			target->pack_size = ftell(request->local_stream);
 			fclose(request->local_stream);
 			request->local_stream = NULL;
 			if (!move_temp_to_file(request->tmpfile,
-- 
1.4.4.4.gf198

```

## Junio C Hamano, 2007-01-10 01:10

Subject: Re: [PATCH] Don't die in git-http-fetch when fetching packs.
Message-ID: <7v1wm3hekz.fsf@assigned-by-dhcp.cox.net>
URL: https://gitlist.dev/e/7v1wm3hekz.fsf%40assigned-by-dhcp.cox.net
In-Reply-To: <20070110010452.GA30610@spearce.org>

```
"Shawn O. Pearce" <spearce@spearce.org> writes:

> My sp/mmap changes to pack-check.c modified the function such that
> it expects packed_git.pack_size to be populated with the total
> bytecount of the packfile by the caller.
>
> But that isn't the case for packs obtained by git-http-fetch as
> pack_size was not initialized before being accessed.  This caused
> verify_pack to think it had 2^32-21 bytes available when the
> downloaded pack perhaps was only 305 bytes in length.  The use_pack
> function then later dies with "offset beyond end of packfile"
> when computing the overall file checksum.
>
> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
> ---
>
>  For the tip of my sp/mmap topic.  Without it HTTP fetch and push
>  support is severely broken as it cannot deal with packs.

Ah, thanks.  I've seen this today and a repeated fetch after
that fixed it and thought it was a mirroring lag.

```

## Shawn O. Pearce, 2007-01-10 01:28

Subject: Re: [PATCH] Don't die in git-http-fetch when fetching packs.
Message-ID: <20070110012801.GA30703@spearce.org>
URL: https://gitlist.dev/e/20070110012801.GA30703%40spearce.org
In-Reply-To: <7v1wm3hekz.fsf@assigned-by-dhcp.cox.net>

```
Junio C Hamano <junkio@cox.net> wrote:
> "Shawn O. Pearce" <spearce@spearce.org> writes:
> >  For the tip of my sp/mmap topic.  Without it HTTP fetch and push
> >  support is severely broken as it cannot deal with packs.
> 
> Ah, thanks.  I've seen this today and a repeated fetch after
> that fixed it and thought it was a mirroring lag.

Me too.  I have actually been fighting with it on and off since we
got sp/mmap reasonably stable.  I just always kept attributing it
to kernel.org mirroring lag until I realized it was just happening
way too often.

-- 
Shawn.

```
