summaryrefslogtreecommitdiffstats
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
parent4791015e6f0adf7f3a0a6a59884c4092ca3c19ef (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.c5
-rw-r--r--src/libvterm/src/vterm.c2
-rw-r--r--src/version.c2
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,