diff options
author | Bram Moolenaar <Bram@vim.org> | 2019-11-24 22:13:58 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2019-11-24 22:13:58 +0100 |
commit | a106e6cde682bda4ad10ed745acb51975fcb02e0 (patch) | |
tree | 86024d5a49d805131d03b71b7db409292dacfa14 | |
parent | 70077dd1ca63636afaf07acf22519981e3a8e4b7 (diff) | |
download | vim-git-a106e6cde682bda4ad10ed745acb51975fcb02e0.tar.gz |
patch 8.1.2340: quickfix test fails under valgrind and asanv8.1.2340
Problem: Quickfix test fails under valgrind and asan.
Solution: Make sure long line does not overflow IObuff. (Dominique Pelle,
closes #5263) Put back fix for large terminals. (Yegappan
Lakshmanan, closes #5264)
-rw-r--r-- | src/quickfix.c | 24 | ||||
-rw-r--r-- | src/testdir/test_quickfix.vim | 13 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 26 insertions, 13 deletions
diff --git a/src/quickfix.c b/src/quickfix.c index e58318a3b..72cdc6ed6 100644 --- a/src/quickfix.c +++ b/src/quickfix.c @@ -4416,7 +4416,7 @@ qf_buf_add_line(buf_T *buf, linenr_T lnum, qfline_T *qfp, char_u *dirname) if (qfp->qf_module != NULL) { - STRCPY(IObuff, qfp->qf_module); + vim_strncpy(IObuff, qfp->qf_module, IOSIZE - 1); len = (int)STRLEN(IObuff); } else if (qfp->qf_fnum != 0 @@ -4424,7 +4424,7 @@ qf_buf_add_line(buf_T *buf, linenr_T lnum, qfline_T *qfp, char_u *dirname) && errbuf->b_fname != NULL) { if (qfp->qf_type == 1) // :helpgrep - STRCPY(IObuff, gettail(errbuf->b_fname)); + vim_strncpy(IObuff, gettail(errbuf->b_fname), IOSIZE - 1); else { // shorten the file name if not done already @@ -4435,26 +4435,29 @@ qf_buf_add_line(buf_T *buf, linenr_T lnum, qfline_T *qfp, char_u *dirname) mch_dirname(dirname, MAXPATHL); shorten_buf_fname(errbuf, dirname, FALSE); } - STRCPY(IObuff, errbuf->b_fname); + vim_strncpy(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) { - sprintf((char *)IObuff + len, "%ld", qfp->qf_lnum); + vim_snprintf((char *)IObuff + len, IOSIZE - len, "%ld", qfp->qf_lnum); len += (int)STRLEN(IObuff + len); if (qfp->qf_col > 0) { - sprintf((char *)IObuff + len, " col %d", qfp->qf_col); + vim_snprintf((char *)IObuff + len, IOSIZE - len, + " col %d", qfp->qf_col); len += (int)STRLEN(IObuff + len); } - sprintf((char *)IObuff + len, "%s", + vim_snprintf((char *)IObuff + len, IOSIZE - len, "%s", (char *)qf_types(qfp->qf_type, qfp->qf_nr)); len += (int)STRLEN(IObuff + len); } @@ -4463,8 +4466,11 @@ qf_buf_add_line(buf_T *buf, linenr_T lnum, qfline_T *qfp, char_u *dirname) 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 diff --git a/src/testdir/test_quickfix.vim b/src/testdir/test_quickfix.vim index 291e22317..3a9e6720e 100644 --- a/src/testdir/test_quickfix.vim +++ b/src/testdir/test_quickfix.vim @@ -626,10 +626,15 @@ func s:test_xhelpgrep(cchar) let w3 = win_getid() call assert_true(&buftype == 'help') call assert_true(winnr() == 1) - call win_gotoid(w1) - call assert_equal(w3, win_getid(winnr('k'))) - call win_gotoid(w2) - call assert_equal(w3, win_getid(winnr('k'))) + " 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 diff --git a/src/version.c b/src/version.c index 17517f5e2..bebf22003 100644 --- a/src/version.c +++ b/src/version.c @@ -738,6 +738,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2340, +/**/ 2339, /**/ 2338, |