]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.2.3847: illegal memory access when using a lambda with an error v8.2.3847
authorBram Moolenaar <Bram@vim.org>
Sat, 18 Dec 2021 16:54:31 +0000 (16:54 +0000)
committerBram Moolenaar <Bram@vim.org>
Sat, 18 Dec 2021 16:54:31 +0000 (16:54 +0000)
Problem:    Illegal memory access when using a lambda with an error.
Solution:   Avoid skipping over the NUL after a string.

src/eval.c
src/testdir/test_lambda.vim
src/version.c

index f45cd8e772392cce69b5a5728ccec64a3b780032..ecc242dcdde32e8eede949395cb0b2ff704d47ac 100644 (file)
@@ -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;
index e173ea3893e80048e68d15bb3c6c48af96747ead..e6dcb6774c3793102dab5c1dba94aac31441876b 100644 (file)
@@ -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()
index 92612d5a3d0d8fe5ce90b48654ae6fd170edc843..8ae0a86f442ea520563f2ae936ebbe285777033d 100644 (file)
@@ -749,6 +749,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    3847,
 /**/
     3846,
 /**/