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:
parent
796cc42d3a
commit
5da04ef1b4
22
src/term.c
22
src/term.c
@ -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
|
#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 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
|
* out_flush(): flush the output buffer
|
||||||
@ -2660,12 +2666,14 @@ out_char_nf(unsigned c)
|
|||||||
void
|
void
|
||||||
out_str_nf(char_u *s)
|
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();
|
out_flush();
|
||||||
|
|
||||||
while (*s)
|
while (*s)
|
||||||
out_char_nf(*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)
|
if (p_wd)
|
||||||
out_flush();
|
out_flush();
|
||||||
}
|
}
|
||||||
@ -2694,7 +2702,7 @@ out_str_cf(char_u *s)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (out_pos > OUT_SIZE - 20)
|
if (out_pos > OUT_SIZE - MAX_ESC_SEQ_LEN)
|
||||||
out_flush();
|
out_flush();
|
||||||
#ifdef HAVE_TGETENT
|
#ifdef HAVE_TGETENT
|
||||||
for (p = s; *s; ++s)
|
for (p = s; *s; ++s)
|
||||||
@ -2762,7 +2770,7 @@ out_str(char_u *s)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
/* avoid terminal strings being split up */
|
/* avoid terminal strings being split up */
|
||||||
if (out_pos > OUT_SIZE - 20)
|
if (out_pos > OUT_SIZE - MAX_ESC_SEQ_LEN)
|
||||||
out_flush();
|
out_flush();
|
||||||
#ifdef HAVE_TGETENT
|
#ifdef HAVE_TGETENT
|
||||||
tputs((char *)s, 1, TPUTSFUNCAST out_char_nf);
|
tputs((char *)s, 1, TPUTSFUNCAST out_char_nf);
|
||||||
|
@ -771,6 +771,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1105,
|
||||||
/**/
|
/**/
|
||||||
1104,
|
1104,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user