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)
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 */
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] :
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 1467,
/**/
1466,
/**/