]> git.eshelyaron.com Git - emacs.git/commitdiff
Don't crash with invalid argument in check-coding-systems-region
authorMattias Engdegård <mattiase@acm.org>
Wed, 8 Apr 2020 15:13:39 +0000 (17:13 +0200)
committerMattias Engdegård <mattiase@acm.org>
Thu, 9 Apr 2020 10:06:39 +0000 (12:06 +0200)
* src/coding.c (Fcheck_coding_systems_region): Don't crash if
the third arg contains something that isn't a coding system.
* test/src/coding-tests.el (coding-check-coding-systems-region):
New test.

src/coding.c
test/src/coding-tests.el

index c24c70c0899bdcd404e7500ce294859619b62ab0..ffcb9cf0a1a8664c45c6854738c8f24da559b4c6 100644 (file)
@@ -9302,7 +9302,10 @@ is nil.  */)
   for (tail = coding_system_list; CONSP (tail); tail = XCDR (tail))
     {
       elt = XCAR (tail);
-      attrs = AREF (CODING_SYSTEM_SPEC (elt), 0);
+      Lisp_Object spec = CODING_SYSTEM_SPEC (elt);
+      if (!VECTORP (spec))
+        xsignal1 (Qcoding_system_error, elt);
+      attrs = AREF (spec, 0);
       ASET (attrs, coding_attr_trans_tbl,
            get_translation_table (attrs, 1, NULL));
       list = Fcons (list2 (elt, attrs), list);
index 83a06b8179e48122632e4b836d24c5acd4be3926..8d92bcdcd1ae81d732df25fb724d45dacca0314d 100644 (file)
         (should (eq (decode-coding-string s coding t) s))
         (should (eq (encode-coding-string s coding t) s))))))
 
+(ert-deftest coding-check-coding-systems-region ()
+  (should (equal (check-coding-systems-region "aå" nil '(utf-8))
+                 nil))
+  (should (equal (check-coding-systems-region "aåbγc" nil
+                                              '(utf-8 iso-latin-1 us-ascii))
+                 '((iso-latin-1 3) (us-ascii 1 3))))
+  (should-error (check-coding-systems-region "å" nil '(bad-coding-system))))
+
 ;; Local Variables:
 ;; byte-compile-warnings: (not obsolete)
 ;; End: