]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix problem with symlinks in compile buffers
authorLars Ingebrigtsen <larsi@gnus.org>
Thu, 26 Aug 2021 17:28:34 +0000 (19:28 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Thu, 26 Aug 2021 17:28:34 +0000 (19:28 +0200)
* lisp/progmodes/compile.el (compilation-find-file): Avoid
`expand-file-name' when computing the file names, because that will
reliably give the wrong result when there's symlinks and ".."
involved (bug#8035).

lisp/progmodes/compile.el

index 1fb6124ab562bd493df8bed6bbedacf14facb6c2..af7b8292b7444c9c81519309f968723e9c290520 100644 (file)
@@ -2951,7 +2951,8 @@ attempts to find a file whose name is produced by (format FMT FILENAME)."
             fmts formats)
       ;; For each directory, try each format string.
       (while (and fmts (null buffer))
-        (setq name (expand-file-name (format (car fmts) filename) thisdir)
+        (setq name (file-truename
+                    (file-name-concat thisdir (format (car fmts) filename)))
               buffer (and (file-exists-p name)
                           (find-file-noselect name))
               fmts (cdr fmts)))
@@ -2973,7 +2974,8 @@ attempts to find a file whose name is produced by (format FMT FILENAME)."
         (setq thisdir (car dirs)
               fmts formats)
         (while (and fmts (null buffer))
-          (setq name (expand-file-name (format (car fmts) filename) thisdir)
+          (setq name (file-truename
+                      (file-name-concat thisdir (format (car fmts) filename)))
                 buffer (and (file-exists-p name)
                             (find-file-noselect name))
                 fmts (cdr fmts)))
@@ -3016,7 +3018,8 @@ attempts to find a file whose name is produced by (format FMT FILENAME)."
               (ding) (sit-for 2))
              ((and (file-directory-p name)
                    (not (file-exists-p
-                         (setq name (expand-file-name filename name)))))
+                         (setq name (file-truename
+                                     (file-name-concat name filename))))))
               (message "No `%s' in directory %s" filename origname)
               (ding) (sit-for 2))
              (t