]> git.eshelyaron.com Git - emacs.git/commitdiff
Reject invalid 5-byte sequences when detecting UTF-8 encoding
authorEli Zaretskii <eliz@gnu.org>
Fri, 15 Jun 2018 14:39:34 +0000 (17:39 +0300)
committerEli Zaretskii <eliz@gnu.org>
Fri, 15 Jun 2018 14:39:34 +0000 (17:39 +0300)
* src/coding.c (detect_coding_utf_8): Reject multibyte sequences
whose leading byte is greater than MAX_MULTIBYTE_LEADING_CODE.
(Bug#31829)
* src/character.h (MAX_MULTIBYTE_LEADING_CODE): Add commentary
about the connection between the value of this macro and MAX_CHAR.

src/character.h
src/coding.c

index 1f21b2ad330e743c440fd4c6e9df5ddbbffead0e..bc65759aa2a99145f1e4441f82189062c81bc5c9 100644 (file)
@@ -57,7 +57,8 @@ INLINE_HEADER_BEGIN
 
 /* Minimum leading code of multibyte characters.  */
 #define MIN_MULTIBYTE_LEADING_CODE 0xC0
-/* Maximum leading code of multibyte characters.  */
+/* Maximum leading code of multibyte characters.  Note: this must be
+   updated if we ever increase MAX_CHAR above.  */
 #define MAX_MULTIBYTE_LEADING_CODE 0xF8
 
 /* Unicode character values.  */
index e756ba169dd5807bdca476e4f4e5c58426765868..b1eb2edb497a3d0776f4be9702a465b4d41f6daf 100644 (file)
@@ -1225,7 +1225,10 @@ detect_coding_utf_8 (struct coding_system *coding,
       ONE_MORE_BYTE (c4);
       if (c4 < 0 || ! UTF_8_EXTRA_OCTET_P (c4))
        break;
-      if (UTF_8_5_OCTET_LEADING_P (c))
+      if (UTF_8_5_OCTET_LEADING_P (c)
+         /* If we ever need to increase MAX_CHAR, the below may need
+            to be reviewed.  */
+         && c < MAX_MULTIBYTE_LEADING_CODE)
        {
          nchars++;
          continue;