Browse Source

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

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>
Signed-off-by: Junio C Hamano <junkio@cox.net>
maint
Shawn O. Pearce 18 years ago committed by Junio C Hamano
parent
commit
1c23d794bf
  1. 1
      http-fetch.c
  2. 3
      http-push.c

1
http-fetch.c

@ -809,6 +809,7 @@ static int fetch_pack(struct alt_base *repo, unsigned char *sha1) @@ -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);

3
http-push.c

@ -770,11 +770,14 @@ static void finish_request(struct transfer_request *request) @@ -770,11 +770,14 @@ static void finish_request(struct transfer_request *request)
request->url, curl_errorstr);
remote->can_update_info_refs = 0;
} else {
off_t pack_size = ftell(request->local_stream);

fclose(request->local_stream);
request->local_stream = NULL;
if (!move_temp_to_file(request->tmpfile,
request->filename)) {
target = (struct packed_git *)request->userData;
target->pack_size = pack_size;
lst = &remote->packs;
while (*lst != target)
lst = &((*lst)->next);

Loading…
Cancel
Save