]> git.eshelyaron.com Git - emacs.git/commitdiff
When decrypting non-decrypted files, make epa show the raw files
authorLars Ingebrigtsen <larsi@gnus.org>
Tue, 4 Aug 2020 19:42:44 +0000 (21:42 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Tue, 4 Aug 2020 19:42:44 +0000 (21:42 +0200)
* lisp/epa-file.el (epa-file-insert-file-contents): When trying to
decrypt a non-decrypted file, just show the bytes from the file
instead (bug#3829).

lisp/epa-file.el

index 20043a9eae45ac745bea41d45f6a1ab2c1fd6ac5..bbd9279a9a829815a8b2b984acba507553b61115 100644 (file)
@@ -151,17 +151,25 @@ encryption is used."
                        (nth 3 error)))
             (let ((exists (file-exists-p local-file)))
               (when exists
-                ;; Hack to prevent find-file from opening empty buffer
-                ;; when decryption failed (bug#6568).  See the place
-                ;; where `find-file-not-found-functions' are called in
-                ;; `find-file-noselect-1'.
-                (setq-local epa-file-error error)
-                (add-hook 'find-file-not-found-functions
-                          'epa-file--find-file-not-found-function
-                          nil t)
-                (epa-display-error context))
-              (signal (if exists 'file-error 'file-missing)
-                      (cons "Opening input file" (cdr error))))))
+                (epa-display-error context)
+                 ;; When the .gpg file isn't an encrypted file (e.g.,
+                 ;; it's a keyring.gpg file instead), then gpg will
+                 ;; say "Unexpected exit" as the error message.  In
+                 ;; that case, just display the bytes.
+                 (if (equal (caddr error) "Unexpected; Exit")
+                     (setq string (with-temp-buffer
+                                    (insert-file-contents-literally local-file)
+                                    (buffer-string)))
+                  ;; Hack to prevent find-file from opening empty buffer
+                  ;; when decryption failed (bug#6568).  See the place
+                  ;; where `find-file-not-found-functions' are called in
+                  ;; `find-file-noselect-1'.
+                  (setq-local epa-file-error error)
+                  (add-hook 'find-file-not-found-functions
+                            'epa-file--find-file-not-found-function
+                            nil t)
+                  (signal (if exists 'file-error 'file-missing)
+                          (cons "Opening input file" (cdr error))))))))
           (set-buffer buf) ;In case timer/filter changed/killed it (bug#16029)!
          (setq-local epa-file-encrypt-to
                       (mapcar #'car (epg-context-result-for