Skip to content

Commit 256b76a

Browse files
committed
t5564: use a short path for the SOCKS proxy socket
The SOCKS proxy test introduced in 0ca365c (http: do not ignore proxy path, 2024-08-02) creates a Unix domain socket in `$TRASH_DIRECTORY`. When the trash directory path is long (e.g. when running from a deeply nested worktree), the socket path can exceed the 108-character limit for `struct sockaddr_un.sun_path` on Linux, causing the test to fail with "Path length ... is longer than maximum supported length (108)". We cannot work around this using the chdir trick our own socket code employs, because both sides of the connection are outside our control: the socket is created by socks4-proxy.pl via Perl's IO::Socket::UNIX, and the client side is libcurl. Use `mktemp -d` to create a unique temporary directory with a short path, and place the socket inside it. This avoids collisions between concurrent test runs (e.g. `--stress`) and tmpdir-race vulnerabilities that a static `/tmp` path would be susceptible to. Helped-by: Jeff King <peff@peff.net> Assisted-by: Claude Opus 4.6 Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
1 parent 94f0577 commit 256b76a

1 file changed

Lines changed: 9 additions & 2 deletions

File tree

t/t5564-http-proxy.sh

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,20 @@ start_socks() {
5050

5151
# The %30 tests that the correct amount of percent-encoding is applied to the
5252
# proxy string passed to curl.
53+
# Use a short path for the socket to avoid exceeding the 108-character
54+
# Unix domain socket limit when the trash directory path is long.
55+
SOCKS_TMPDIR=$(mktemp -d)
56+
SOCKS_SOCK="$SOCKS_TMPDIR/%30.sock"
57+
5358
test_lazy_prereq SOCKS_PROXY '
5459
test_have_prereq PERL &&
55-
start_socks "$TRASH_DIRECTORY/%30.sock"
60+
start_socks "$SOCKS_SOCK"
5661
'
5762

5863
test_atexit '
5964
test ! -e "$TRASH_DIRECTORY/socks.pid" ||
6065
kill "$(cat "$TRASH_DIRECTORY/socks.pid")"
66+
rm -rf "$SOCKS_TMPDIR"
6167
'
6268

6369
# The below tests morally ought to be gated on a prerequisite that Git is
@@ -70,7 +76,8 @@ old_libcurl_error() {
7076

7177
test_expect_success SOCKS_PROXY 'clone via Unix socket' '
7278
test_when_finished "rm -rf clone" &&
73-
test_config_global http.proxy "socks4://localhost$PWD/%2530.sock" && {
79+
socks_proxy_url="socks4://localhost$(echo "$SOCKS_SOCK" | sed "s/%/%25/g")" &&
80+
test_config_global http.proxy "$socks_proxy_url" && {
7481
{
7582
GIT_TRACE_CURL=$PWD/trace \
7683
GIT_TRACE_CURL_COMPONENTS=socks \

0 commit comments

Comments
 (0)