summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-12-18 16:54:31 +0000
committerBram Moolenaar <Bram@vim.org>2021-12-18 16:54:31 +0000
commit605ec91e5a7330d61be313637e495fa02a6dc264 (patch)
treef3d03e51a7bde96ecc0f05271909536b4973b42d
parent60618c8f1a7ea55452837a446525272142286471 (diff)
downloadvim-git-605ec91e5a7330d61be313637e495fa02a6dc264.tar.gz
patch 8.2.3847: illegal memory access when using a lambda with an errorv8.2.3847
Problem: Illegal memory access when using a lambda with an error. Solution: Avoid skipping over the NUL after a string.
-rw-r--r--src/eval.c7
-rw-r--r--src/testdir/test_lambda.vim2
-rw-r--r--src/version.c2
3 files changed, 9 insertions, 2 deletions
diff --git a/src/eval.c b/src/eval.c
index f45cd8e77..ecc242dcd 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -3871,12 +3871,15 @@ eval_lambda(
++*arg;
ret = eval1(arg, rettv, evalarg);
*arg = skipwhite_and_linebreak(*arg, evalarg);
- if (**arg != ')')
+ if (**arg == ')')
+ {
+ ++*arg;
+ }
+ else
{
emsg(_(e_missing_closing_paren));
ret = FAIL;
}
- ++*arg;
}
if (ret != OK)
return FAIL;
diff --git a/src/testdir/test_lambda.vim b/src/testdir/test_lambda.vim
index e173ea389..e6dcb6774 100644
--- a/src/testdir/test_lambda.vim
+++ b/src/testdir/test_lambda.vim
@@ -64,6 +64,8 @@ function Test_lambda_fails()
call assert_fails('echo {a, a -> a + a}(1, 2)', 'E853:')
call assert_fails('echo {a, b -> a + b)}(1, 2)', 'E451:')
echo assert_fails('echo 10->{a -> a + 2}', 'E107:')
+
+ call assert_fails('eval 0->(', "E110: Missing ')'")
endfunc
func Test_not_lamda()
diff --git a/src/version.c b/src/version.c
index 92612d5a3..8ae0a86f4 100644
--- a/src/version.c
+++ b/src/version.c
@@ -750,6 +750,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 3847,
+/**/
3846,
/**/
3845,