Subject: Re: bug#5553: 23.1.92; Archives with wrong coding system

From: Juri Linkov <[email-masked]>
Date: Wed, 10 Feb 2010 00:19:35 +0200

> When `archive-mode' is enabled for an archive file with an unknown file
> extension, using the rule ("\\(PK00\\)?[P]K\003\004" . archive-mode)
> from `magic-fallback-mode-alist', visiting such a file fails with the
> args-out-of-range error.
>
> The following patch should fix this bug using the same regexp as in
> `magic-fallback-mode-alist' and the same coding system as for archive
> file extensions in `auto-coding-alist':

The same problem exists also for images.  `magic-fallback-mode-alist' contains:

  (image-type-auto-detected-p . image-mode)

but visiting an image file with a non-standard file extension
(i.e. not in `auto-mode-alist') doesn't display it as an image.

The following patch fixes this problem, but it seems duplicating
image regexps from `image-type-header-regexps' is too ugly?

=== modified file 'lisp/international/mule.el'
--- lisp/international/mule.el	2010-02-09 05:00:56 +0000
+++ lisp/international/mule.el	2010-02-09 22:16:28 +0000
@@ -1655,7 +1655,14 @@ (defcustom auto-coding-regexp-alist
     ("\\`\xEF\xBB\xBF" . utf-8-with-signature)
     ("\\`;ELC\024\0\0\0" . emacs-mule)	; Emacs 20-compiled
     ;; For `archive-mode' in `magic-fallback-mode-alist':
-    ("\\(PK00\\)?[P]K\003\004" . no-conversion-multibyte)))
+    ("\\(PK00\\)?[P]K\003\004" . no-conversion-multibyte)
+    ;; For `image-mode' in `magic-fallback-mode-alist'
+    ;; (regexps duplicated from `image-type-header-regexps'):
+    ("\\`GIF8[79]a"                 . no-conversion) ; gif
+    ("\\`\x89PNG\r\n\x1a\n"         . no-conversion) ; png
+    ("\\`\\(?:MM\0\\*\\|II\\*\0\\)" . no-conversion) ; tiff
+    ("\\`\xff\xd8"                  . no-conversion) ; jpeg
+    ))
   "Alist of patterns vs corresponding coding systems.
 Each element looks like (REGEXP . CODING-SYSTEM).
 A file whose first bytes match REGEXP is decoded by CODING-SYSTEM on reading.

-- 
Juri Linkov
http://www.jurta.org/emacs/