Hello community,

here is the log from the commit of package tmux for openSUSE:Factory checked in 
at 2019-01-05 14:42:50
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/tmux (Old)
 and      /work/SRC/openSUSE:Factory/.tmux.new.28833 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "tmux"

Sat Jan  5 14:42:50 2019 rev:43 rq:662786 version:2.8

Changes:
--------
--- /work/SRC/openSUSE:Factory/tmux/tmux.changes        2018-11-28 
11:14:34.174800335 +0100
+++ /work/SRC/openSUSE:Factory/.tmux.new.28833/tmux.changes     2019-01-05 
14:42:50.948455234 +0100
@@ -1,0 +2,5 @@
+Fri Jan  4 12:32:29 UTC 2019 - Ondřej Súkup <[email protected]>
+
+- add issue_1549.diff to fix boo#1120170
+
+-------------------------------------------------------------------

New:
----
  issue_1549.diff

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ tmux.spec ++++++
--- /var/tmp/diff_new_pack.Xn7vv5/_old  2019-01-05 14:42:51.396454854 +0100
+++ /var/tmp/diff_new_pack.Xn7vv5/_new  2019-01-05 14:42:51.396454854 +0100
@@ -28,6 +28,7 @@
 # PATCH-FIX-OPENSUSE [email protected] -- Use /run/tmux instead of /tmp 
as the default socket path, this add some robustness against accidental 
deletion via systemd-tmpfiles-clean, tmpwatch, or similar
 Patch0:         tmux-socket-path.patch
 Patch1:         fix-cve201819387.patch
+Patch2:         issue_1549.diff
 BuildRequires:  pkgconfig
 BuildRequires:  utempter-devel
 BuildRequires:  pkgconfig(libevent) >= 2.0
@@ -55,6 +56,7 @@
 %setup -q
 %patch0 -p1
 %patch1 -p3
+%patch2 -p1
 
 %build
 export CFLAGS="%{optflags} -fno-strict-aliasing"

++++++ issue_1549.diff ++++++
diff --git a/client.c b/client.c
index 2ea88f7b..bb9fedf2 100644
--- a/client.c
+++ b/client.c
@@ -222,7 +222,7 @@ client_main(struct event_base *base, int argc, char **argv, 
int flags)
        const char              *ttynam, *cwd;
        pid_t                    ppid;
        enum msgtype             msg;
-       char                    *cause, path[PATH_MAX];
+       char                    *cause;
        struct termios           tio, saved_tio;
        size_t                   size;
 
@@ -277,9 +277,7 @@ client_main(struct event_base *base, int argc, char **argv, 
int flags)
        client_peer = proc_add_peer(client_proc, fd, client_dispatch, NULL);
 
        /* Save these before pledge(). */
-       if ((cwd = getenv("PWD")) == NULL &&
-           (cwd = getcwd(path, sizeof path)) == NULL &&
-           (cwd = find_home()) == NULL)
+       if ((cwd = find_cwd()) == NULL && (cwd = find_home()) == NULL)
                cwd = "/";
        if ((ttynam = ttyname(STDIN_FILENO)) == NULL)
                ttynam = "";
diff --git a/tmux.c b/tmux.c
index 5b73079e..f4265e0a 100644
--- a/tmux.c
+++ b/tmux.c
@@ -163,6 +163,31 @@ setblocking(int fd, int state)
        }
 }
 
+const char *
+find_cwd(void)
+{
+       char             resolved1[PATH_MAX], resolved2[PATH_MAX];
+       static char      cwd[PATH_MAX];
+       const char      *pwd;
+
+       if (getcwd(cwd, sizeof cwd) == NULL)
+               return (NULL);
+       if ((pwd = getenv("PWD")) == NULL || *pwd == '\0')
+               return (cwd);
+
+       /*
+        * We want to use PWD so that symbolic links are maintained,
+        * but only if it matches the actual working directory.
+        */
+       if (realpath(pwd, resolved1) == NULL)
+               return (cwd);
+       if (realpath(cwd, resolved2) == NULL)
+               return (cwd);
+       if (strcmp(resolved1, resolved2) != 0)
+               return (cwd);
+       return (pwd);
+}
+
 const char *
 find_home(void)
 {
@@ -188,7 +213,6 @@ int
 main(int argc, char **argv)
 {
        char                                    *path, *label, *cause, **var;
-       char                                     tmp[PATH_MAX];
        const char                              *s, *shell, *cwd;
        int                                      opt, flags, keys;
        const struct options_table_entry        *oe;
@@ -293,8 +317,7 @@ main(int argc, char **argv)
        global_environ = environ_create();
        for (var = environ; *var != NULL; var++)
                environ_put(global_environ, *var);
-       if ((cwd = getenv("PWD")) == NULL &&
-           (cwd = getcwd(tmp, sizeof tmp)) != NULL)
+       if ((cwd = find_cwd()) != NULL)
                environ_set(global_environ, "PWD", "%s", cwd);
 
        global_options = options_create(NULL);
diff --git a/tmux.h b/tmux.h
index cf8bf087..8d67e7df 100644
--- a/tmux.h
+++ b/tmux.h
@@ -1508,6 +1508,7 @@ extern int                 ptm_fd;
 extern const char      *shell_command;
 int             areshell(const char *);
 void            setblocking(int, int);
+const char     *find_cwd(void);
 const char     *find_home(void);
 
 /* proc.c */

Reply via email to