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

Re: Am I doing something wrong?

From
Junio C Hamano <junkio@cox.net>
Date
Dec 21, 2005, 19:58 UTC
Message-ID
<7vvexi8bo9.fsf@assigned-by-dhcp.cox.net>
In-Reply-To
<7vhd92b90w.fsf@assigned-by-dhcp.cox.net>

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
Previous: Peter BaumannNext: Chuck Lever
Message 9 of 11 in “Am I doing something wrong?”
  1. Randal L. SchwartzDec 21, 2005
  2. Junio C HamanoDec 21, 2005
  3. Randal L. SchwartzDec 21, 2005
  4. Junio C HamanoDec 21, 2005
  5. Randal L. SchwartzDec 21, 2005
  6. Junio C HamanoDec 21, 2005
  7. Peter BaumannDec 21, 2005
  8. Peter BaumannDec 21, 2005
  9. Junio C HamanoDec 21, 2005
  10. Chuck LeverDec 21, 2005
  11. Junio C HamanoDec 21, 2005

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.