Re: Am I doing something wrong?

From: Chuck Lever <cel@citi.umich.edu>
Date: 2005-12-22 08:03:58
maybe the Linux kernel repository needs the same treatment.  i'm getting 
the "all zeros" commit error message when trying to pull from it.


Junio C Hamano wrote:
> It turns out to be a stupid off-by-one error in http-fetch.c.
> The objects/info/packs file has the following:
> 
>         $ cat objects/info/packs
>         P pack-46ff81b11ed16ed38caa4aada913cb08c00185b2.pack
>         P pack-05f611b3b8198b262acdf678584d365f8e879aec.pack
>         P pack-740c99c0be6734adbd130737dec2608dc4682761.pack
>         $
> 
> The code that parses this in http-fetch had an off-by-one, and
> incorrectly thought that the last entry was incomplete.  This
> problem did not surface earlier, because objects/info/packs file
> used to have other information after all the P lines, but
> http-fetch was not interested in was skipping them.  The latest
> update-server-info stopped producing those extra lines.
> 
> As a band-aid, I just ran this command at the server that public
> ones mirror from:
> 
> 	$ echo >>objects/info/packs
> 
> The change seems to have mirrored out already, and my "broken"
> client before the attached patch successfully fetches from
> there, so hopefully things would work OK for you as well.
> 
> I also have to add some code to server-info.c, to append an
> empty after objects/info/packs file to work around this bug in
> the deployed http clients.
> 
> Thanks for your help in diagnosing and fixing this problem.
> 
> -- >8 --
> [PATCH] http-fetch.c: fix objects/info/pack parsing.
> 
> It failed to register the last pack mentioned in the
> objects/info/packs file.  Also it had an independent overrun
> error.
> 
> Signed-off-by: Junio C Hamano <junkio@cox.net>
> 
> ---
> git diff
> diff --git a/http-fetch.c b/http-fetch.c
> index ad59f1c..3cd6ef9 100644
> --- a/http-fetch.c
> +++ b/http-fetch.c
> @@ -658,7 +658,7 @@ static int fetch_indices(struct alt_base
>  		switch (data[i]) {
>  		case 'P':
>  			i++;
> -			if (i + 52 < buffer.posn &&
> +			if (i + 52 <= buffer.posn &&
>  			    !strncmp(data + i, " pack-", 6) &&
>  			    !strncmp(data + i + 46, ".pack\n", 6)) {
>  				get_sha1_hex(data + i + 6, sha1);
> @@ -667,7 +667,7 @@ static int fetch_indices(struct alt_base
>  				break;
>  			}
>  		default:
> -			while (data[i] != '\n')
> +			while (i < buffer.posn && data[i] != '\n')
>  				i++;
>  		}
>  		i++;
> 
> Compilation finished at Wed Dec 21 11:40:06
> 
> -
> To unsubscribe from this list: send the line "unsubscribe git" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html


-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Received on Thu Dec 22 08:04:31 2005

This archive was generated by hypermail 2.1.8 : 2005-12-22 08:04:39 EST