From b4ba6e49af0459f0ea528df38c45795dbf313ee6 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 28 Oct 2025 10:51:30 +0000 Subject: [PATCH] Do not realpath() everything since it is pointless and breaks symlinks. GitHub issue 4427. --- cmd-source-file.c | 9 --------- tmux.c | 16 ++++++++-------- 2 files changed, 8 insertions(+), 17 deletions(-) diff --git a/cmd-source-file.c b/cmd-source-file.c index b46e6b94..8f8b2504 100644 --- a/cmd-source-file.c +++ b/cmd-source-file.c @@ -136,16 +136,7 @@ cmd_source_file_done(struct client *c, const char *path, int error, static void cmd_source_file_add(struct cmd_source_file_data *cdata, const char *path) { - char resolved[PATH_MAX]; - - if (realpath(path, resolved) == NULL) { - log_debug("%s: realpath(\"%s\") failed: %s", __func__, - path, strerror(errno)); - } else - path = resolved; - log_debug("%s: %s", __func__, path); - cdata->files = xreallocarray(cdata->files, cdata->nfiles + 1, sizeof *cdata->files); cdata->files[cdata->nfiles++] = xstrdup(path); diff --git a/tmux.c b/tmux.c index 28cb9f70..261cfd57 100644 --- a/tmux.c +++ b/tmux.c @@ -143,7 +143,7 @@ expand_path(const char *path, const char *home) } static void -expand_paths(const char *s, char ***paths, u_int *n, int ignore_errors) +expand_paths(const char *s, char ***paths, u_int *n, int no_realpath) { const char *home = find_home(); char *copy, *next, *tmp, resolved[PATH_MAX], *expanded; @@ -160,15 +160,15 @@ expand_paths(const char *s, char ***paths, u_int *n, int ignore_errors) log_debug("%s: invalid path: %s", __func__, next); continue; } - if (realpath(expanded, resolved) == NULL) { - log_debug("%s: realpath(\"%s\") failed: %s", __func__, - expanded, strerror(errno)); - if (ignore_errors) { + if (no_realpath) + path = expanded; + else { + if (realpath(expanded, resolved) == NULL) { + log_debug("%s: realpath(\"%s\") failed: %s", __func__, + expanded, strerror(errno)); free(expanded); continue; } - path = expanded; - } else { path = xstrdup(resolved); free(expanded); } @@ -200,7 +200,7 @@ make_label(const char *label, char **cause) label = "default"; uid = getuid(); - expand_paths(TMUX_SOCK, &paths, &n, 1); + expand_paths(TMUX_SOCK, &paths, &n, 0); if (n == 0) { xasprintf(cause, "no suitable socket path"); return (NULL);