From: Chuck Lever Date: Wed, 21 Dec 2005 21:03:58 GMT Subject: Re: Am I doing something wrong? Message-ID: <43A9C33E.2070807@citi.umich.edu> In-Reply-To: <7vvexi8bo9.fsf@assigned-by-dhcp.cox.net> 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 > > --- > 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 begin:vcard fn:Chuck Lever n:Lever;Charles org:Network Appliance, Incorporated;Open Source NFS Client Development adr:535 West William Street, Suite 3100;;Center for Information Technology Integration;Ann Arbor;MI;48103-4943;USA email;internet:cel@citi.umich.edu title:Member of Technical Staff tel;work:+1 734 763 4415 tel;fax:+1 734 763 4434 tel;home:+1 734 668 1089 x-mozilla-html:FALSE url:http://troy.citi.umich.edu/u/cel/ version:2.1 end:vcard