]> code.delx.au - gnu-emacs/commitdiff
More validatation of coding system in 'write-region'
authorEli Zaretskii <eliz@gnu.org>
Sat, 3 Oct 2015 11:49:16 +0000 (14:49 +0300)
committerEli Zaretskii <eliz@gnu.org>
Sat, 3 Oct 2015 11:49:16 +0000 (14:49 +0300)
* src/coding.c (choose_write_coding_system): More validation of
coding-system from various sources.  Suggested by Andreas Schwab
<schwab@linux-m68k.org>.  (Bug#21602)

src/fileio.c

index 65aaf572fd76e7fa17d89d1d2b481ce9064e71b4..15bebdf09facc212072d5bd84b316412082113c4 100644 (file)
@@ -4593,17 +4593,26 @@ choose_write_coding_system (Lisp_Object start, Lisp_Object end, Lisp_Object file
 
       if (!force_raw_text
          && !NILP (Ffboundp (Vselect_safe_coding_system_function)))
-       /* Confirm that VAL can surely encode the current region.  */
-       val = call5 (Vselect_safe_coding_system_function,
-                    start, end, val, Qnil, filename);
+       {
+         /* Confirm that VAL can surely encode the current region.  */
+         val = call5 (Vselect_safe_coding_system_function,
+                      start, end, val, Qnil, filename);
+         CHECK_CODING_SYSTEM (val);
+       }
 
       /* If the decided coding-system doesn't specify end-of-line
         format, we use that of
         `default-buffer-file-coding-system'.  */
-      if (! using_default_coding
-         && ! NILP (BVAR (&buffer_defaults, buffer_file_coding_system)))
-       val = (coding_inherit_eol_type
-              (val, BVAR (&buffer_defaults, buffer_file_coding_system)));
+      if (! using_default_coding)
+       {
+         Lisp_Object dflt = BVAR (&buffer_defaults, buffer_file_coding_system);
+
+         if (! NILP (dflt))
+           {
+             CHECK_CODING_SYSTEM (dflt);
+             val = (coding_inherit_eol_type (val, dflt));
+           }
+       }
 
       /* If we decide not to encode text, use `raw-text' or one of its
         subsidiaries.  */