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


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

CVSROOT:        /sources/emacs
Module name:    emacs
Changes by:     Glenn Morris <gm>       07/08/22 03:49:15

Index: files.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/files.el,v
retrieving revision 1.919
retrieving revision 1.920
diff -u -b -r1.919 -r1.920
--- files.el    13 Aug 2007 13:40:58 -0000      1.919
+++ files.el    22 Aug 2007 03:49:15 -0000      1.920
@@ -3173,6 +3173,11 @@
 
 (defun backup-buffer-copy (from-name to-name 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
@@ -3181,6 +3186,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))
@@ -3189,6 +3199,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]