Subject: Re: bug#21870: 25.0.50; image now shown after decrypting image file

From: Daiki Ueno <[email-masked]>
Date: Mon, 16 Nov 2015 15:10:11 +0900

Eli Zaretskii <[email-masked]> writes:

>> >> It seems the auto-decryption functionality does not work correctly for
>> >> encrypted images - that is, decryption works, but then the image is not
>> >> shown.
>> >> 
>> >> Steps to reproduce:
>> >> 1) Open an encrypted image file (say, test.jpeg.gpg)
>> >> 2) Enter the passphrase, when asked (by easypg I assume)
>> >> 3) Now, see a small rectangle in the upper left of the current window;
>> >>    instead of the expected image
>> >> 
>> >> Expected behavior would be to see the image, just as if opening
>> >> test.jpeg directly.
>> >
>> > If you do the same with a different kind of file, does Emacs activate
>> > the correct major mode after decrypting the file?
>> 
>> Yes - e.g. opening test.org.gpg will decrypt, then activate org-mode.
>> 
>> (and note that this is reproducible with emacs -Q)
>
> Looks like epa-file.el doesn't run normal-mode after decrypting the
> file?

Thanks for forwarding.  Hmm, it seems that normal-mode is actually
called, but image-mode tries to load the contents from the file, not
from the buffer.  Does the following hack look correct?

(It seems reading test.jpeg.gz works because ImageMagick supports
compressed files.)

Regards,
-- 
Daiki Ueno
diff --git a/lisp/image-mode.el b/lisp/image-mode.el
index e6d6a3e..12c8b95 100644
--- a/lisp/image-mode.el
+++ b/lisp/image-mode.el
@@ -658,7 +658,11 @@ image-toggle-display-image
 			   (not (and (boundp 'archive-superior-buffer)
 				     archive-superior-buffer))
 			   (not (and (boundp 'tar-superior-buffer)
-				     tar-superior-buffer)))))
+				     tar-superior-buffer))
+                           (not (eq (find-file-name-handler
+                                     filename
+                                     'insert-file-contents)
+                                    'epa-file-handler)))))
 	 (file-or-data (if data-p
 			   (string-make-unibyte
 			    (buffer-substring-no-properties (point-min) (point-max)))