From: Brandon Williams Date: Mon, 16 Oct 2017 17:55:25 +0000 (-0700) Subject: daemon: recognize hidden request arguments X-Git-Tag: v2.16.0-rc0~69^2~7 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/dfe422d04db56e7306a78fcf5b8e93b6b7f60e34?ds=inline;hp=dfe422d04db56e7306a78fcf5b8e93b6b7f60e34 daemon: recognize hidden request arguments A normal request to git-daemon is structured as "command path/to/repo\0host=..\0" and due to a bug introduced in 49ba83fb6 (Add virtualization support to git-daemon, 2006-09-19) we aren't able to place any extra arguments (separated by NULs) besides the host otherwise the parsing of those arguments would enter an infinite loop. This bug was fixed in 73bb33a94 (daemon: Strictly parse the "extra arg" part of the command, 2009-06-04) but a check was put in place to disallow extra arguments so that new clients wouldn't trigger this bug in older servers. In order to get around this limitation teach git-daemon to recognize additional request arguments hidden behind a second NUL byte. Requests can then be structured like: "command path/to/repo\0host=..\0\0version=1\0key=value\0". git-daemon can then parse out the extra arguments and set 'GIT_PROTOCOL' accordingly. By placing these extra arguments behind a second NUL byte we can skirt around both the infinite loop bug in 49ba83fb6 (Add virtualization support to git-daemon, 2006-09-19) as well as the explicit disallowing of extra arguments introduced in 73bb33a94 (daemon: Strictly parse the "extra arg" part of the command, 2009-06-04) because both of these versions of git-daemon check for a single NUL byte after the host argument before terminating the argument parsing. Signed-off-by: Brandon Williams Signed-off-by: Junio C Hamano ---