summaryrefslogtreecommitdiff
path: root/lisp/epg.el
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2012-01-14 15:09:15 +0800
committerChong Yidong <cyd@gnu.org>2012-01-14 15:09:15 +0800
commit9e5788aaef98e88aeb5b2476549f72b591e0bf4a (patch)
tree25ea16ea3195d9c928cab55f144d4a60906e80c0 /lisp/epg.el
parent3cdb7f5a3854515902553934d2a9886781c5e56f (diff)
downloademacs-9e5788aaef98e88aeb5b2476549f72b591e0bf4a.tar.gz
Fix race condition in epg.el compat code.
* lisp/epg.el (epg--make-temp-file): Avoid permission race condition when running on old Emacs versions. Fixes: debbugs:10403
Diffstat (limited to 'lisp/epg.el')
-rw-r--r--lisp/epg.el7
1 files changed, 4 insertions, 3 deletions
diff --git a/lisp/epg.el b/lisp/epg.el
index 3505e183c1f..6529afb2d3c 100644
--- a/lisp/epg.el
+++ b/lisp/epg.el
@@ -1951,7 +1951,8 @@ The returned file name (created by appending some random characters at the end
of PREFIX, and expanding against `temporary-file-directory' if necessary),
is guaranteed to point to a newly created empty file.
You can then use `write-region' to write new data into the file."
- (let (tempdir tempfile)
+ (let ((orig-modes (default-file-modes))
+ tempdir tempfile)
(setq prefix (expand-file-name prefix
(if (featurep 'xemacs)
(temp-directory)
@@ -1959,6 +1960,7 @@ You can then use `write-region' to write new data into the file."
(unwind-protect
(let (file)
;; First, create a temporary directory.
+ (set-default-file-modes #o700)
(while (condition-case ()
(progn
(setq tempdir (make-temp-name
@@ -1969,14 +1971,12 @@ You can then use `write-region' to write new data into the file."
(make-directory tempdir))
;; let's try again.
(file-already-exists t)))
- (set-file-modes tempdir 448)
;; Second, create a temporary file in the tempdir.
;; There *is* a race condition between `make-temp-name'
;; and `write-region', but we don't care it since we are
;; in a private directory now.
(setq tempfile (make-temp-name (concat tempdir "/EMU")))
(write-region "" nil tempfile nil 'silent)
- (set-file-modes tempfile 384)
;; Finally, make a hard-link from the tempfile.
(while (condition-case ()
(progn
@@ -1986,6 +1986,7 @@ You can then use `write-region' to write new data into the file."
;; let's try again.
(file-already-exists t)))
file)
+ (set-default-file-modes orig-modes)
;; Cleanup the tempfile.
(and tempfile
(file-exists-p tempfile)