mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
vim-patch:8.1.2340: quickfix test fails under valgrind and asan
Problem: Quickfix test fails under valgrind and asan.
Solution: Make sure long line does not overflow IObuff. (Dominique Pelle,
closes vim/vim#5263) Put back fix for large terminals. (Yegappan
Lakshmanan, closes vim/vim#5264)
a106e6cde6
This commit is contained in:
parent
886969e1f8
commit
6f3a18197b
@ -3757,13 +3757,13 @@ static int qf_buf_add_line(buf_T *buf, linenr_T lnum, const qfline_T *qfp,
|
|||||||
buf_T *errbuf;
|
buf_T *errbuf;
|
||||||
|
|
||||||
if (qfp->qf_module != NULL) {
|
if (qfp->qf_module != NULL) {
|
||||||
STRCPY(IObuff, qfp->qf_module);
|
STRLCPY(IObuff, qfp->qf_module, IOSIZE - 1);
|
||||||
len = (int)STRLEN(IObuff);
|
len = (int)STRLEN(IObuff);
|
||||||
} else if (qfp->qf_fnum != 0
|
} else if (qfp->qf_fnum != 0
|
||||||
&& (errbuf = buflist_findnr(qfp->qf_fnum)) != NULL
|
&& (errbuf = buflist_findnr(qfp->qf_fnum)) != NULL
|
||||||
&& errbuf->b_fname != NULL) {
|
&& errbuf->b_fname != NULL) {
|
||||||
if (qfp->qf_type == 1) { // :helpgrep
|
if (qfp->qf_type == 1) { // :helpgrep
|
||||||
STRLCPY(IObuff, path_tail(errbuf->b_fname), sizeof(IObuff));
|
STRLCPY(IObuff, path_tail(errbuf->b_fname), IOSIZE - 1);
|
||||||
} else {
|
} else {
|
||||||
// shorten the file name if not done already
|
// shorten the file name if not done already
|
||||||
if (errbuf->b_sfname == NULL
|
if (errbuf->b_sfname == NULL
|
||||||
@ -3773,33 +3773,37 @@ static int qf_buf_add_line(buf_T *buf, linenr_T lnum, const qfline_T *qfp,
|
|||||||
}
|
}
|
||||||
shorten_buf_fname(errbuf, dirname, false);
|
shorten_buf_fname(errbuf, dirname, false);
|
||||||
}
|
}
|
||||||
STRLCPY(IObuff, errbuf->b_fname, sizeof(IObuff));
|
STRLCPY(IObuff, errbuf->b_fname, IOSIZE - 1);
|
||||||
}
|
}
|
||||||
len = (int)STRLEN(IObuff);
|
len = (int)STRLEN(IObuff);
|
||||||
} else {
|
} else {
|
||||||
len = 0;
|
len = 0;
|
||||||
}
|
}
|
||||||
IObuff[len++] = '|';
|
if (len < IOSIZE - 1) {
|
||||||
|
IObuff[len++] = '|';
|
||||||
|
}
|
||||||
if (qfp->qf_lnum > 0) {
|
if (qfp->qf_lnum > 0) {
|
||||||
snprintf((char *)IObuff + len, sizeof(IObuff), "%" PRId64,
|
snprintf((char *)IObuff + len, (size_t)(IOSIZE - len), "%" PRId64,
|
||||||
(int64_t)qfp->qf_lnum);
|
(int64_t)qfp->qf_lnum);
|
||||||
len += (int)STRLEN(IObuff + len);
|
len += (int)STRLEN(IObuff + len);
|
||||||
|
|
||||||
if (qfp->qf_col > 0) {
|
if (qfp->qf_col > 0) {
|
||||||
snprintf((char *)IObuff + len, sizeof(IObuff), " col %d", qfp->qf_col);
|
snprintf((char *)IObuff + len, (size_t)(IOSIZE - len), " col %d",
|
||||||
|
qfp->qf_col);
|
||||||
len += (int)STRLEN(IObuff + len);
|
len += (int)STRLEN(IObuff + len);
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf((char *)IObuff + len, sizeof(IObuff), "%s",
|
snprintf((char *)IObuff + len, (size_t)(IOSIZE - len), "%s",
|
||||||
(char *)qf_types(qfp->qf_type, qfp->qf_nr));
|
(char *)qf_types(qfp->qf_type, qfp->qf_nr));
|
||||||
len += (int)STRLEN(IObuff + len);
|
len += (int)STRLEN(IObuff + len);
|
||||||
} else if (qfp->qf_pattern != NULL) {
|
} else if (qfp->qf_pattern != NULL) {
|
||||||
qf_fmt_text(qfp->qf_pattern, IObuff + len, IOSIZE - len);
|
qf_fmt_text(qfp->qf_pattern, IObuff + len, IOSIZE - len);
|
||||||
len += (int)STRLEN(IObuff + len);
|
len += (int)STRLEN(IObuff + len);
|
||||||
}
|
}
|
||||||
IObuff[len++] = '|';
|
if (len < IOSIZE - 2) {
|
||||||
IObuff[len++] = ' ';
|
IObuff[len++] = '|';
|
||||||
|
IObuff[len++] = ' ';
|
||||||
|
}
|
||||||
|
|
||||||
// Remove newlines and leading whitespace from the text.
|
// Remove newlines and leading whitespace from the text.
|
||||||
// For an unrecognized line keep the indent, the compiler may
|
// For an unrecognized line keep the indent, the compiler may
|
||||||
|
@ -554,6 +554,33 @@ func s:test_xhelpgrep(cchar)
|
|||||||
" This wipes out the buffer, make sure that doesn't cause trouble.
|
" This wipes out the buffer, make sure that doesn't cause trouble.
|
||||||
Xclose
|
Xclose
|
||||||
|
|
||||||
|
" When the current window is vertically split, jumping to a help match
|
||||||
|
" should open the help window at the top.
|
||||||
|
only | enew
|
||||||
|
let w1 = win_getid()
|
||||||
|
vert new
|
||||||
|
let w2 = win_getid()
|
||||||
|
Xnext
|
||||||
|
let w3 = win_getid()
|
||||||
|
call assert_true(&buftype == 'help')
|
||||||
|
call assert_true(winnr() == 1)
|
||||||
|
" See jump_to_help_window() for details
|
||||||
|
let w2_width = winwidth(w2)
|
||||||
|
if w2_width != &columns && w2_width < 80
|
||||||
|
call assert_equal(['col', [['leaf', w3],
|
||||||
|
\ ['row', [['leaf', w2], ['leaf', w1]]]]], winlayout())
|
||||||
|
else
|
||||||
|
call assert_equal(['row', [['col', [['leaf', w3], ['leaf', w2]]],
|
||||||
|
\ ['leaf', w1]]] , winlayout())
|
||||||
|
endif
|
||||||
|
|
||||||
|
new | only
|
||||||
|
set buftype=help
|
||||||
|
set modified
|
||||||
|
call assert_fails('Xnext', 'E37:')
|
||||||
|
set nomodified
|
||||||
|
new | only
|
||||||
|
|
||||||
if a:cchar == 'l'
|
if a:cchar == 'l'
|
||||||
" When a help window is present, running :lhelpgrep should reuse the
|
" When a help window is present, running :lhelpgrep should reuse the
|
||||||
" help window and not the current window
|
" help window and not the current window
|
||||||
|
Loading…
Reference in New Issue
Block a user