summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-05-26 16:32:44 +0100
committerBram Moolenaar <Bram@vim.org>2022-05-26 16:32:44 +0100
commite2fa213cf571041dbd04ab0329303ffdc980678a (patch)
tree48ed41606dbbfde24bdf065caf3529acc3dfe4c1
parent338f1fc0ee3ca929387448fe464579d6113fa76a (diff)
downloadvim-git-e2fa213cf571041dbd04ab0329303ffdc980678a.tar.gz
patch 8.2.5024: using freed memory with "]d"v8.2.5024
Problem: Using freed memory with "]d". Solution: Copy the pattern before searching.
-rw-r--r--src/normal.c6
-rw-r--r--src/testdir/test_tagjump.vim6
-rw-r--r--src/version.c2
3 files changed, 14 insertions, 0 deletions
diff --git a/src/normal.c b/src/normal.c
index 53c50dc8b..f07598655 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -4464,6 +4464,11 @@ nv_brackets(cmdarg_T *cap)
clearop(cap->oap);
else
{
+ // Make a copy, if the line was changed it will be freed.
+ ptr = vim_strnsave(ptr, len);
+ if (ptr == NULL)
+ return;
+
find_pattern_in_path(ptr, 0, len, TRUE,
cap->count0 == 0 ? !isupper(cap->nchar) : FALSE,
((cap->nchar & 0xf) == ('d' & 0xf)) ? FIND_DEFINE : FIND_ANY,
@@ -4472,6 +4477,7 @@ nv_brackets(cmdarg_T *cap)
islower(cap->nchar) ? ACTION_SHOW : ACTION_GOTO,
cap->cmdchar == ']' ? curwin->w_cursor.lnum + 1 : (linenr_T)1,
(linenr_T)MAXLNUM);
+ vim_free(ptr);
curwin->w_set_curswant = TRUE;
}
}
diff --git a/src/testdir/test_tagjump.vim b/src/testdir/test_tagjump.vim
index 8b19c634d..aacfb9bae 100644
--- a/src/testdir/test_tagjump.vim
+++ b/src/testdir/test_tagjump.vim
@@ -1399,6 +1399,12 @@ func Test_define_search()
sil norm o0
sil! norm 
bwipe!
+
+ new somefile
+ call setline(1, ['first line', '', '#define something 0'])
+ sil norm 0o0
+ sil! norm ]d
+ bwipe!
endfunc
" Test for [*, [/, ]* and ]/
diff --git a/src/version.c b/src/version.c
index cd6c33162..ec52074c4 100644
--- a/src/version.c
+++ b/src/version.c
@@ -735,6 +735,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 5024,
+/**/
5023,
/**/
5022,