summaryrefslogtreecommitdiffstats
path: root/src/quickfix.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-11-24 22:13:58 +0100
committerBram Moolenaar <Bram@vim.org>2019-11-24 22:13:58 +0100
commita106e6cde682bda4ad10ed745acb51975fcb02e0 (patch)
tree86024d5a49d805131d03b71b7db409292dacfa14 /src/quickfix.c
parent70077dd1ca63636afaf07acf22519981e3a8e4b7 (diff)
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)
Diffstat (limited to 'src/quickfix.c')
-rw-r--r--src/quickfix.c24
1 files changed, 15 insertions, 9 deletions
diff --git a/src/quickfix.c b/src/quickfix.c
index e58318a3bb..72cdc6ed6b 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