summaryrefslogtreecommitdiff
path: root/src/libvterm
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2018-04-07 21:42:56 +0200
committerBram Moolenaar <Bram@vim.org>2018-04-07 21:42:56 +0200
commit77557a7ae66830cb21c79d3a2b48a93b086599b3 (patch)
treed31b3ea474056bc2222448683799c2d29e6560d6 /src/libvterm
parent4791015e6f0adf7f3a0a6a59884c4092ca3c19ef (diff)
downloadvim-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.c5
-rw-r--r--src/libvterm/src/vterm.c2
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);