mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-23 13:27:36 +00:00
* browse-url.el (browse-url-mosaic): Be careful when writing /tmp/Mosaic.PID.
This is CVE-2014-3423. Fixes: debbugs:17428
This commit is contained in:
parent
fa8e9c09f3
commit
4049faae96
2 changed files with 21 additions and 20 deletions
|
|
@ -1,3 +1,9 @@
|
|||
2014-05-08 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* net/browse-url.el (browse-url-mosaic):
|
||||
Be careful when writing /tmp/Mosaic.PID. (Bug#17428)
|
||||
This is CVE-2014-3423.
|
||||
|
||||
2014-05-08 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* xt-mouse.el: Drop spurious/oddly shaped events (bug#17378).
|
||||
|
|
|
|||
|
|
@ -1333,31 +1333,26 @@ used instead of `browse-url-new-window-flag'."
|
|||
(let ((pidfile (expand-file-name browse-url-mosaic-pidfile))
|
||||
pid)
|
||||
(if (file-readable-p pidfile)
|
||||
(save-excursion
|
||||
(find-file pidfile)
|
||||
(goto-char (point-min))
|
||||
(setq pid (read (current-buffer)))
|
||||
(kill-buffer nil)))
|
||||
(if (and pid (zerop (signal-process pid 0))) ; Mosaic running
|
||||
(save-excursion
|
||||
;; This is a predictable temp-file name, which is bad,
|
||||
;; but it is what Mosaic uses/used.
|
||||
;; So it's not Emacs's problem. http://bugs.debian.org/747100
|
||||
(find-file (format "/tmp/Mosaic.%d" pid))
|
||||
(erase-buffer)
|
||||
(insert (if (browse-url-maybe-new-window new-window)
|
||||
"newwin\n"
|
||||
"goto\n")
|
||||
url "\n")
|
||||
(save-buffer)
|
||||
(kill-buffer nil)
|
||||
(with-temp-buffer
|
||||
(insert-file-contents pidfile)
|
||||
(setq pid (read (current-buffer)))))
|
||||
(if (and (integerp pid) (zerop (signal-process pid 0))) ; Mosaic running
|
||||
(progn
|
||||
(with-temp-buffer
|
||||
(insert (if (browse-url-maybe-new-window new-window)
|
||||
"newwin\n"
|
||||
"goto\n")
|
||||
url "\n")
|
||||
(if (file-exists-p (setq pidfile (format "/tmp/Mosaic.%d" pid)))
|
||||
(delete-file pidfile))
|
||||
;; http://debbugs.gnu.org/17428. Use O_EXCL.
|
||||
(write-region nil nil pidfile nil 'silent nil 'excl))
|
||||
;; Send signal SIGUSR to Mosaic
|
||||
(message "Signaling Mosaic...")
|
||||
(signal-process pid 'SIGUSR1)
|
||||
;; Or you could try:
|
||||
;; (call-process "kill" nil 0 nil "-USR1" (int-to-string pid))
|
||||
(message "Signaling Mosaic...done")
|
||||
)
|
||||
(message "Signaling Mosaic...done"))
|
||||
;; Mosaic not running - start it
|
||||
(message "Starting %s..." browse-url-mosaic-program)
|
||||
(apply 'start-process "xmosaic" nil browse-url-mosaic-program
|
||||
|
|
|
|||
Loading…
Reference in a new issue