diff options
author | Bram Moolenaar <Bram@vim.org> | 2018-04-07 21:42:56 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2018-04-07 21:42:56 +0200 |
commit | 77557a7ae66830cb21c79d3a2b48a93b086599b3 (patch) | |
tree | d31b3ea474056bc2222448683799c2d29e6560d6 | |
parent | 4791015e6f0adf7f3a0a6a59884c4092ca3c19ef (diff) |
patch 8.0.1674: libvterm can't handle an OSC string splitv8.0.1674
Problem: Libvterm can't handle a long OSC string that is split.
Solution: When an incomplete OSC string is received copy it to the parser
buffer. Increase the size of the parser buffer to be able to
handle longer strings.
-rw-r--r-- | src/libvterm/src/parser.c | 5 | ||||
-rw-r--r-- | src/libvterm/src/vterm.c | 2 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 8 insertions, 1 deletions
diff --git a/src/libvterm/src/parser.c b/src/libvterm/src/parser.c index c71ea8d736..b07bb94a23 100644 --- a/src/libvterm/src/parser.c +++ b/src/libvterm/src/parser.c @@ -288,6 +288,11 @@ size_t vterm_input_write(VTerm *vt, const char *bytes, size_t len) done_string(vt, string_start, bytes + pos - string_start); ENTER_NORMAL_STATE(); } + else if (pos + 1 == len) { + /* end of input but OSC string isn't finished yet, copy it to + * vt->parser.strbuffer to continue it later */ + more_string(vt, string_start, bytes + pos + 1 - string_start); + } break; case NORMAL: diff --git a/src/libvterm/src/vterm.c b/src/libvterm/src/vterm.c index d9f0e208db..f066b01b81 100644 --- a/src/libvterm/src/vterm.c +++ b/src/libvterm/src/vterm.c @@ -52,7 +52,7 @@ VTerm *vterm_new_with_allocator(int rows, int cols, VTermAllocatorFunctions *fun vt->parser.callbacks = NULL; vt->parser.cbdata = NULL; - vt->parser.strbuffer_len = 64; + vt->parser.strbuffer_len = 500; /* should be able to hold an OSC string */ vt->parser.strbuffer_cur = 0; vt->parser.strbuffer = vterm_allocator_malloc(vt, vt->parser.strbuffer_len); diff --git a/src/version.c b/src/version.c index 9f065797c5..e95a62d3d3 100644 --- a/src/version.c +++ b/src/version.c @@ -763,6 +763,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1674, +/**/ 1673, /**/ 1672, |