emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/files.el,v [EMACS_22_BASE]


From: Glenn Morris
Subject: [Emacs-diffs] Changes to emacs/lisp/files.el,v [EMACS_22_BASE]
Date: Wed, 22 Aug 2007 03:47:36 +0000

CVSROOT:        /sources/emacs
Module name:    emacs
Branch:         EMACS_22_BASE
Changes by:     Glenn Morris <gm>       07/08/22 03:47:36

Index: files.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/files.el,v
retrieving revision 1.896.2.15
retrieving revision 1.896.2.16
diff -u -b -r1.896.2.15 -r1.896.2.16
--- files.el    8 Aug 2007 14:06:01 -0000       1.896.2.15
+++ files.el    22 Aug 2007 03:47:35 -0000      1.896.2.16
@@ -3120,7 +3120,12 @@
            (file-error nil))))))
 
 (defun backup-buffer-copy (from-name to-name modes)
-  (let ((umask (default-file-modes)))
+  (let ((umask (default-file-modes))
+       (dir (or (file-name-directory to-name)
+                default-directory)))
+    ;; Can't delete or create files in a read-only directory.
+    (unless (file-writable-p dir)
+      (signal 'file-error (list "Directory is not writable" dir)))
     (unwind-protect
        (progn
          ;; Create temp files with strict access rights.  It's easy to
@@ -3129,6 +3134,11 @@
          (set-default-file-modes ?\700)
          (while (condition-case ()
                     (progn
+                      ;; If we allow for the possibility of something
+                      ;; creating the file between delete and copy
+                      ;; (below), we must also allow for the
+                      ;; possibility of something deleting it between
+                      ;; a file-exists-p check and a delete.
                       (condition-case nil
                           (delete-file to-name)
                         (file-error nil))
@@ -3137,6 +3147,10 @@
                   (file-already-exists t))
            ;; The file was somehow created by someone else between
            ;; `delete-file' and `copy-file', so let's try again.
+           ;; Does that every actually happen in practice?
+           ;; This is a potential infloop, which seems bad...
+           ;; rms says "I think there is also a possible race
+           ;; condition for making backup files" (emacs-devel 20070821).
            nil))
       ;; Reset the umask.
       (set-default-file-modes umask)))




reply via email to

[Prev in Thread] Current Thread [Next in Thread]