]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix over-protection of byte-compiled files
authorPaul Eggert <eggert@cs.ucla.edu>
Sun, 27 Aug 2017 06:07:01 +0000 (23:07 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Sun, 27 Aug 2017 06:07:58 +0000 (23:07 -0700)
Problem reported by Sven Joachim (Bug#28244).
Also, fix similar problem for autoload files.
* lisp/emacs-lisp/autoload.el (autoload--save-buffer):
Set temp file modes to the buffer-file-name file modes (or 666
if not available) as adjusted by umask.
* lisp/emacs-lisp/bytecomp.el (byte-compile-file):
Set temp file modes to 666 as adjusted by umask.

lisp/emacs-lisp/autoload.el
lisp/emacs-lisp/bytecomp.el

index 4a9bd6d06b36571351e096863cff09f70bca29f3..e811ee23feaa2f5f61bceaacffce855879b7ca78 100644 (file)
@@ -873,12 +873,18 @@ FILE's modification time."
 ;; For parallel builds, to stop another process reading a half-written file.
 (defun autoload--save-buffer ()
   "Save current buffer to its file, atomically."
-  ;; Copied from byte-compile-file.
+  ;; Similar to byte-compile-file.
   (let* ((version-control 'never)
          (tempfile (make-temp-file buffer-file-name))
+        (default-modes (default-file-modes))
+        (temp-modes (logand default-modes #o600))
+        (desired-modes (logand default-modes
+                               (or (file-modes buffer-file-name) #o666)))
          (kill-emacs-hook
           (cons (lambda () (ignore-errors (delete-file tempfile)))
                 kill-emacs-hook)))
+    (unless (= temp-modes desired-modes)
+      (set-file-modes tempfile desired-modes))
     (write-region (point-min) (point-max) tempfile nil 1)
     (backup-buffer)
     (rename-file tempfile buffer-file-name t))
index d769a155aa0549d882e2481bf5e31dbcaac116ea..48bbd618712cb5dcce6768655c59b21916e891f5 100644 (file)
@@ -1896,10 +1896,15 @@ The value is non-nil if there were no errors, nil if errors."
                       ;; parallel bootstrap), it does not risk getting a
                       ;; half-finished file.  (Bug#4196)
                       (tempfile (make-temp-file target-file))
+                      (default-modes (default-file-modes))
+                      (temp-modes (logand default-modes #o600))
+                      (desired-modes (logand default-modes #o666))
                       (kill-emacs-hook
                        (cons (lambda () (ignore-errors
                                           (delete-file tempfile)))
                              kill-emacs-hook)))
+                 (unless (= temp-modes desired-modes)
+                   (set-file-modes tempfile desired-modes))
                  (write-region (point-min) (point-max) tempfile nil 1)
                  ;; This has the intentional side effect that any
                  ;; hard-links to target-file continue to