mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
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)
This commit is contained in:
@@ -46,14 +46,16 @@ static void decode_utf8(VTermEncoding *enc UNUSED, void *data_,
|
||||
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 */
|
||||
|
@@ -248,8 +248,9 @@ static int on_text(const char bytes[], size_t len, void *user)
|
||||
|
||||
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] :
|
||||
|
@@ -771,6 +771,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
1467,
|
||||
/**/
|
||||
1466,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user