changeset 13186:dc39ef257b60 v8.0.1467

patch 8.0.1467: libvterm doesn't handle illegal byte sequence correctly commit https://github.com/vim/vim/commit/fef4ddd5eb8816a6607a624aa401bcfa71a63def Author: Bram Moolenaar <Bram@vim.org> Date: Sun Feb 4 14:49:57 2018 +0100 patch 8.0.1467: libvterm doesn't handle illegal byte sequence correctly Problem: Libvterm doesn't handle illegal byte sequence correctly. Solution: After the invalid code check if there is space to store another character. Allocate one more character. (zhykzhykzhyk, closes #2614, closes #2613)
author Christian Brabandt <cb@256bit.org>
date Sun, 04 Feb 2018 15:00:04 +0100
parents 13fed273cfd6
children a577d6c63cff
files src/libvterm/src/encoding.c src/libvterm/src/state.c src/version.c
diffstat 3 files changed, 10 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/libvterm/src/encoding.c
+++ b/src/libvterm/src/encoding.c
@@ -46,14 +46,16 @@ static void decode_utf8(VTermEncoding *e
       return;
 
     else if(c >= 0x20 && c < 0x7f) {
-      if(data->bytes_remaining)
+      if(data->bytes_remaining) {
+        data->bytes_remaining = 0;
         cp[(*cpi)++] = UNICODE_INVALID;
-
+	if (*cpi >= cplen)
+	  break;
+      }
       cp[(*cpi)++] = c;
 #ifdef DEBUG_PRINT_UTF8
       printf(" UTF-8 char: U+%04x\n", c);
 #endif
-      data->bytes_remaining = 0;
     }
 
     else if(c == 0x7f) /* DEL */
--- a/src/libvterm/src/state.c
+++ b/src/libvterm/src/state.c
@@ -248,8 +248,9 @@ static int on_text(const char bytes[], s
 
   VTermPos oldpos = state->pos;
 
-  /* We'll have at most len codepoints */
-  codepoints = vterm_allocator_malloc(state->vt, len * sizeof(uint32_t));
+  /* We'll have at most len codepoints, plus one from a previous incomplete
+   * sequence. */
+  codepoints = vterm_allocator_malloc(state->vt, (len + 1) * sizeof(uint32_t));
 
   encoding =
     state->gsingle_set     ? &state->encoding[state->gsingle_set] :
--- a/src/version.c
+++ b/src/version.c
@@ -772,6 +772,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1467,
+/**/
     1466,
 /**/
     1465,