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:
Jan Edmund Lazo 2020-07-25 08:17:01 -04:00
parent 886969e1f8
commit 6f3a18197b
No known key found for this signature in database
GPG Key ID: 64915E6E9F735B15
2 changed files with 41 additions and 10 deletions

View File

@ -3757,13 +3757,13 @@ static int qf_buf_add_line(buf_T *buf, linenr_T lnum, const qfline_T *qfp,
buf_T *errbuf;
if (qfp->qf_module != NULL) {
STRCPY(IObuff, qfp->qf_module);
STRLCPY(IObuff, qfp->qf_module, IOSIZE - 1);
len = (int)STRLEN(IObuff);
} else if (qfp->qf_fnum != 0
&& (errbuf = buflist_findnr(qfp->qf_fnum)) != NULL
&& errbuf->b_fname != NULL) {
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 {
// shorten the file name if not done already
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);
}
STRLCPY(IObuff, errbuf->b_fname, sizeof(IObuff));
STRLCPY(IObuff, errbuf->b_fname, IOSIZE - 1);
}
len = (int)STRLEN(IObuff);
} else {
len = 0;
}
IObuff[len++] = '|';
if (len < IOSIZE - 1) {
IObuff[len++] = '|';
}
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);
len += (int)STRLEN(IObuff + len);
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);
}
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));
len += (int)STRLEN(IObuff + len);
} else if (qfp->qf_pattern != NULL) {
qf_fmt_text(qfp->qf_pattern, IObuff + len, IOSIZE - len);
len += (int)STRLEN(IObuff + len);
}
IObuff[len++] = '|';
IObuff[len++] = ' ';
if (len < IOSIZE - 2) {
IObuff[len++] = '|';
IObuff[len++] = ' ';
}
// Remove newlines and leading whitespace from the text.
// For an unrecognized line keep the indent, the compiler may

View File

@ -554,6 +554,33 @@ func s:test_xhelpgrep(cchar)
" This wipes out the buffer, make sure that doesn't cause trouble.
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'
" When a help window is present, running :lhelpgrep should reuse the
" help window and not the current window