0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 8.1.1105: long escape sequences may be split up

Problem:    Long escape sequences may be split up.
Solution:   Assume esccape sequences can be up to 80 bytes long. (Nobuhiro
            Takasaki, closes #4196)
This commit is contained in:
Bram Moolenaar 2019-04-03 21:15:58 +02:00
parent 796cc42d3a
commit 5da04ef1b4
2 changed files with 17 additions and 7 deletions

View File

@ -2538,12 +2538,18 @@ termcapinit(char_u *name)
}
/*
* the number of calls to ui_write is reduced by using the buffer "out_buf"
* The number of calls to ui_write is reduced by using "out_buf".
*/
#define OUT_SIZE 2047
/* Add one to allow mch_write() in os_win32.c to append a NUL */
// add one to allow mch_write() in os_win32.c to append a NUL
static char_u out_buf[OUT_SIZE + 1];
static int out_pos = 0; /* number of chars in out_buf */
static int out_pos = 0; // number of chars in out_buf
// Since the maximum number of SGR parameters shown as a normal value range is
// 16, the escape sequence length can be 4 * 16 + lead + tail.
#define MAX_ESC_SEQ_LEN 80
/*
* out_flush(): flush the output buffer
@ -2660,12 +2666,14 @@ out_char_nf(unsigned c)
void
out_str_nf(char_u *s)
{
if (out_pos > OUT_SIZE - 20) /* avoid terminal strings being split up */
// avoid terminal strings being split up
if (out_pos > OUT_SIZE - MAX_ESC_SEQ_LEN)
out_flush();
while (*s)
out_char_nf(*s++);
/* For testing we write one string at a time. */
// For testing we write one string at a time.
if (p_wd)
out_flush();
}
@ -2694,7 +2702,7 @@ out_str_cf(char_u *s)
return;
}
#endif
if (out_pos > OUT_SIZE - 20)
if (out_pos > OUT_SIZE - MAX_ESC_SEQ_LEN)
out_flush();
#ifdef HAVE_TGETENT
for (p = s; *s; ++s)
@ -2762,7 +2770,7 @@ out_str(char_u *s)
}
#endif
/* avoid terminal strings being split up */
if (out_pos > OUT_SIZE - 20)
if (out_pos > OUT_SIZE - MAX_ESC_SEQ_LEN)
out_flush();
#ifdef HAVE_TGETENT
tputs((char *)s, 1, TPUTSFUNCAST out_char_nf);

View File

@ -771,6 +771,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1105,
/**/
1104,
/**/