git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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

From
Shawn O. Pearce <spearce@spearce.org>
Date
Jan 10, 2007, 01:04 UTC
Message-ID
<20070110010452.GA30610@spearce.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
Next: Junio C Hamano
Message 1 of 3 in “Don't die in git-http-fetch when fetching packs.”
  1. Don't die in git-http-fetch when fetching packs.Shawn O. Pearce, Jan 10, 2007
  2. Junio C HamanoJan 10, 2007
  3. Shawn O. PearceJan 10, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.