forked from aniani/vim
patch 9.0.0527: long sign text may overflow buffer
Problem: Long sign text may overflow buffer. Solution: Use a larger buffer. Prevent for overflow.
This commit is contained in:
parent
f7c7aa3594
commit
2b1ddf19f8
@ -124,7 +124,9 @@ typedef struct {
|
||||
int saved_c_final;
|
||||
int saved_char_attr;
|
||||
|
||||
char_u extra[21]; // "%ld " and 'fdc' must fit in here
|
||||
char_u extra[NUMBUFLEN + MB_MAXBYTES];
|
||||
// "%ld " and 'fdc' must fit in here, as well
|
||||
// any text sign
|
||||
|
||||
#ifdef FEAT_DIFF
|
||||
hlf_T diff_hlf; // type of diff highlighting
|
||||
@ -259,13 +261,13 @@ get_sign_display_info(
|
||||
{
|
||||
if (nrcol)
|
||||
{
|
||||
int n, width = number_width(wp) - 2;
|
||||
int width = number_width(wp) - 2;
|
||||
int n;
|
||||
|
||||
for (n = 0; n < width; n++)
|
||||
wlv->extra[n] = ' ';
|
||||
wlv->extra[n] = 0;
|
||||
STRCAT(wlv->extra, wlv->p_extra);
|
||||
STRCAT(wlv->extra, " ");
|
||||
vim_snprintf((char *)wlv->extra + n,
|
||||
sizeof(wlv->extra) - n, "%s ", wlv->p_extra);
|
||||
wlv->p_extra = wlv->extra;
|
||||
}
|
||||
wlv->c_extra = NUL;
|
||||
|
@ -196,6 +196,20 @@ func Test_sign()
|
||||
\ bufnr('%'), 'E155:')
|
||||
endfunc
|
||||
|
||||
func Test_sign_many_bytes()
|
||||
new
|
||||
set signcolumn=number
|
||||
set number
|
||||
call setline(1, 'some text')
|
||||
" composing characters can use many bytes, check for overflow
|
||||
sign define manyBytes text=▶᷄᷅᷆◀᷄᷅᷆᷇
|
||||
sign place 17 line=1 name=manyBytes
|
||||
redraw
|
||||
|
||||
bwipe!
|
||||
sign undefine manyBytes
|
||||
endfunc
|
||||
|
||||
" Undefining placed sign is not recommended.
|
||||
" Quoting :help sign
|
||||
"
|
||||
|
@ -699,6 +699,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
527,
|
||||
/**/
|
||||
526,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user