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 /src/libvterm | |
parent | 4791015e6f0adf7f3a0a6a59884c4092ca3c19ef (diff) | |
download | vim-git-77557a7ae66830cb21c79d3a2b48a93b086599b3.tar.gz |
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.
Diffstat (limited to 'src/libvterm')
-rw-r--r-- | src/libvterm/src/parser.c | 5 | ||||
-rw-r--r-- | src/libvterm/src/vterm.c | 2 |
2 files changed, 6 insertions, 1 deletions
diff --git a/src/libvterm/src/parser.c b/src/libvterm/src/parser.c index c71ea8d73..b07bb94a2 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 d9f0e208d..f066b01b8 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); |