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

2.21: Change in ref advertisement handling?

From
Bryan Turner <bturner@atlassian.com>
Date
Feb 16, 2019, 02:45 UTC
Message-ID
<CAGyf7-FC1q1f4F36_hS53sdP3wCxd7fTgbegSj+tPS4idvF+Hg@mail.gmail.com>

In Bitbucket Server's Git test suite, we have some lazy tests that use a stub HTTP server with mocked payloads to feed a Git client, to test its behavior.

For some of those tests, we have the server configured to send a response body like this for a ref advertisement: 76d28b849be7fb3301e4bd14fb28328947b4f5a1<tab>HEAD<newline> 76d28b849be7fb3301e4bd14fb28328947b4f5a1<tab>refs/heads/master<newline>

There are headers we set, like "Content-Type: application/x-git-upload-pack-advertisement", but that's the response. It's not packeted or anything.

If I use (for example) Git 2.17.1 and run "git ls-remote <url>" with that response, Git happily displays essentially identical output, HEAD and master at 76d28b849be7fb3301e4bd14fb28328947b4f5a1.

If I run that "git ls-remote" with 2.21.0-rc1, Git displays "fatal: the remote end hung up unexpectedly" and dies.

If I change the mocked response to: 001e# service=git-upload-pack<newline> 0000<no newline; wrapping just for display> 003276d28b849be7fb3301e4bd14fb28328947b4f5a1<sp>HEAD<newline> 003f76d28b849be7fb3301e4bd14fb28328947b4f5a1<sp>refs/heads/master<newline> 0000

This works in both 2.17.1 and 2.21.0-rc1. (I was a little surprised Git didn't care about the lack of a NUL byte after "HEAD" with the capabilities after it, before the newline, but even 2.21 doesn't seem to mind.)

First let me say, I had no idea these tests of ours existed, and I'm surprised that they worked on Git 2.20 and older, given that the response isn't in proper pkt-line format.

I'm not looking for anything to change here, let me hasten to add; I'm just interested in some clarification. Why did our invalid ref advertisement response work in older Git versions? Why has it stopped working in 2.21?

Best regards, Bryan Turner

Next: Jeff King
Message 1 of 2 in “2.21: Change in ref advertisement handling?”
  1. Bryan TurnerFeb 16, 2019
  2. Jeff KingFeb 16, 2019

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.