From: Anderson A. Giacomolli Date: Sat, 7 Nov 2026 02:53:53 +0000 (-0300) Subject: Check the socket path before the daemon writes X-Git-Url: http://git.giacomolli.uk/onechat/commitdiff_plain/8b892c6a3384f510940c8a31e007ad97932f9af5?ds=inline Check the socket path before the daemon writes The daemon checks the length of the socket path first, before it reads the config, takes the token lock, or opens the agent. With a data directory whose path is too long, it gives the error and leaves the directory empty, so a failed start leaves no agent or lock file behind. Issue: 5daf23e --- diff --git a/daemon.go b/daemon.go index 034cac7..58bf502 100644 --- a/daemon.go +++ b/daemon.go @@ -56,6 +56,14 @@ func daemon(ctx context.Context, out io.Writer) (err error) { return err } + // Check the socket path before the daemon writes a file, so that a data + // directory with a long path stays empty. + socket := filepath.Join(dir, socketFileName) + err = checkSocketPath(socket) + if err != nil { + return err + } + config, err := loadConfig(dir) if err != nil { return err @@ -90,7 +98,7 @@ func daemon(ctx context.Context, out io.Writer) (err error) { err = errors.Join(err, memory.Close()) }() - listener, err := listenSocket(filepath.Join(dir, socketFileName)) + listener, err := listenSocket(socket) if err != nil { return err } diff --git a/daemon_test.go b/daemon_test.go index 91d6ecc..fe40929 100644 --- a/daemon_test.go +++ b/daemon_test.go @@ -116,6 +116,18 @@ func TestListenSocketRefusesALongPath(t *testing.T) { require.ErrorContains(t, err, "set ONECHAT_DIR to a shorter path") } +func TestDaemonWritesNoFileForALongSocketPath(t *testing.T) { + dir := filepath.Join(t.TempDir(), strings.Repeat("d", 100)) + t.Setenv("ONECHAT_DIR", dir) + + err := daemon(t.Context(), io.Discard) + require.ErrorContains(t, err, "set ONECHAT_DIR to a shorter path") + + entries, err := os.ReadDir(dir) + require.NoError(t, err) + require.Empty(t, entries) +} + func TestOneProcessHoldsTheTokens(t *testing.T) { dir := t.TempDir() lock, err := lockTokens(dir)