Avoid file-name errors when viewing PDF from Gnus

* lisp/doc-view.el (doc-view-mode): Run the output file name
through 'convert-standard-filename', to avoid problems with
characters that are not allowed in file names on some
systems.  (Bug#32989)

Copyright-paperwork-exempt: yes
This commit is contained in:
Jordan Wilson 2018-10-10 11:45:57 +01:00 committed by Eli Zaretskii
parent c9390423d6
commit 88ef31abd4

View file

@ -1772,27 +1772,28 @@ toggle between displaying the document or editing it as text.
(doc-view-make-safe-dir doc-view-cache-directory) (doc-view-make-safe-dir doc-view-cache-directory)
;; Handle compressed files, remote files, files inside archives ;; Handle compressed files, remote files, files inside archives
(setq-local doc-view--buffer-file-name (setq-local doc-view--buffer-file-name
(cond (convert-standard-filename
(jka-compr-really-do-compress (cond
;; FIXME: there's a risk of name conflicts here. (jka-compr-really-do-compress
(expand-file-name ;; FIXME: there's a risk of name conflicts here.
(file-name-nondirectory (expand-file-name
(file-name-sans-extension buffer-file-name)) (file-name-nondirectory
doc-view-cache-directory)) (file-name-sans-extension buffer-file-name))
;; Is the file readable by local processes? doc-view-cache-directory))
;; We used to use `file-remote-p' but it's unclear what it's ;; Is the file readable by local processes?
;; supposed to return nil for things like local files accessed ;; We used to use `file-remote-p' but it's unclear what it's
;; via `su' or via file://... ;; supposed to return nil for things like local files accessed
((let ((file-name-handler-alist nil)) ;; via `su' or via file://...
(not (and buffer-file-name ((let ((file-name-handler-alist nil))
(file-readable-p buffer-file-name)))) (not (and buffer-file-name
;; FIXME: there's a risk of name conflicts here. (file-readable-p buffer-file-name))))
(expand-file-name ;; FIXME: there's a risk of name conflicts here.
(if buffer-file-name (expand-file-name
(file-name-nondirectory buffer-file-name) (if buffer-file-name
(buffer-name)) (file-name-nondirectory buffer-file-name)
doc-view-cache-directory)) (buffer-name))
(t buffer-file-name))) doc-view-cache-directory))
(t buffer-file-name))))
(when (not (string= doc-view--buffer-file-name buffer-file-name)) (when (not (string= doc-view--buffer-file-name buffer-file-name))
(write-region nil nil doc-view--buffer-file-name)) (write-region nil nil doc-view--buffer-file-name))