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

Re: [Bug] Query string not being phrased correctly when question marks present in config URL.

From
Jeff King <peff@peff.net>
Date
Sep 23, 2014, 09:06 UTC
Message-ID
<20140923090627.GB7644@peff.net>
In-Reply-To
<CAOf__z5DTzchZpnz-DzoOEHnt8RdypV7=RPP1=AzinsskQEg8w@mail.gmail.com>
On Tue, Sep 23, 2014 at 04:20:55AM +1000, Steven Lawler wrote:
> Cause:
> [remote "repo"]
>   url = http://example.com/git/example.com?foo=bar
> There is a question mark in the URL of the repo URL.

Is the question mark there because it is separating query parameters from the path, or is "?foo=bar" part of the literal path? If the latter, it needs to be percent-escaped.

Show 8 quoted lines
> Effect (Taken from Apache logs):
> [22/Sep/2014:14:12:07 -0400] "GET
> /git/example.com?foo=bar/info/refs&service=git-receive-pack HTTP/1.1"
> 403 207 "-" "git/1.9.4.msysgit.1"
> 
> Git attempts to correct the issue by making the query string continue
> using ampersands where it would have started the original query
> string.
It has to, because:
  http://example.com/git/example.com?foo=bar?service=git-receive-pack

would not mark the "service" parameter as a separate parameter of the query-string. However, from your expected output below, I do not think that part is the thing you are complaining about:

Show 6 quoted lines
> Expected outcome:
> The git client should move the ?foo=bar onto the beginning (or end) of
> the query string that it is creating. For example:
> [22/Sep/2014:14:12:07 -0400] "GET
> /git/example.com/info/refs?foo=bar&service=git-receive-pack HTTP/1.1"
> 403 207 "-" "git/1.9.4.msysgit.1"

The difference here is not the ampersand but the placement of "info/refs". Let's forget about the "service" parameter for a moment. Git needs to access the "info/refs" directory of the repo specified by the URL it is passed. Given:

  http://host/path?key=value

which part of the URL specifies the path to the repository (and that we could munge to access info/refs)? I do not think there is a well-defined answer. If "path" is the path to the repo and "key=value" is an unrelated parameter, you would want:

  http://host/path/info/refs?key=value

which matches your example. But if the key is specifying the repository path in its value, you would want to append it directly there. For example,

  http://host/git?path=my-repo.git
should become:
  http://host/git?path=my-repo.git/info/refs

So I think you would need a config option or other mechanism to specify which form your URL requires.

-Peff
Previous: Steven Lawler
Message 2 of 2 in “[Bug] Query string not being phrased correctly when question marks present in config URL.”
  1. Steven LawlerSep 22, 2014
  2. Jeff KingSep 23, 2014

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.