Blame SOURCES/0001-patch-8.2.4774-crash-when-using-a-number-for-lambda-.patch

af580a
diff -up vim82/src/errors.h.cve1420 vim82/src/errors.h
af580a
--- vim82/src/errors.h.cve1420	2022-04-25 16:01:03.559985019 +0200
af580a
+++ vim82/src/errors.h	2022-04-25 16:01:58.113332024 +0200
af580a
@@ -383,3 +383,7 @@ EXTERN char e_cannot_use_default_values_
af580a
 	INIT(= N_("E1172: Cannot use default values in a lambda"));
af580a
 EXTERN char e_resulting_text_too_long[]
af580a
 	INIT(= N_("E1240: Resulting text too long"));
af580a
+#ifdef FEAT_EVAL
af580a
+EXTERN char e_string_or_function_required_for_arrow_parens_expr[]
af580a
+	INIT(= N_("E1275: String or function required for ->(expr)"));
af580a
+#endif
af580a
diff -up vim82/src/eval.c.cve1420 vim82/src/eval.c
af580a
--- vim82/src/eval.c.cve1420	2022-04-25 16:01:03.560985007 +0200
af580a
+++ vim82/src/eval.c	2022-04-25 16:14:11.746600369 +0200
af580a
@@ -3718,13 +3718,20 @@ eval_lambda(
af580a
 	if (**arg != ')')
af580a
 	{
af580a
 	    emsg(_(e_missing_close));
af580a
-	    ret = FAIL;
af580a
+	    return FAIL;
af580a
+	}
af580a
+	if (rettv->v_type != VAR_STRING && rettv->v_type != VAR_FUNC
af580a
+					       && rettv->v_type != VAR_PARTIAL)
af580a
+	{
af580a
+	    emsg(_(e_string_or_function_required_for_arrow_parens_expr));
af580a
+	    return FAIL;
af580a
 	}
af580a
 	++*arg;
af580a
     }
af580a
     if (ret != OK)
af580a
 	return FAIL;
af580a
-    else if (**arg != '(')
af580a
+
af580a
+    if (**arg != '(')
af580a
     {
af580a
 	if (verbose)
af580a
 	{
af580a
diff -up vim82/src/testdir/test_lambda.vim.cve1420 vim82/src/testdir/test_lambda.vim
af580a
--- vim82/src/testdir/test_lambda.vim.cve1420	2022-04-25 16:01:03.560985007 +0200
af580a
+++ vim82/src/testdir/test_lambda.vim	2022-04-25 16:17:01.694886566 +0200
af580a
@@ -64,6 +64,10 @@ function Test_lambda_fails()
af580a
   call assert_fails('echo {a, a -> a + a}(1, 2)', 'E853:')
af580a
   call assert_fails('echo {a, b -> a + b)}(1, 2)', 'E451:')
af580a
   echo assert_fails('echo 10->{a -> a + 2}', 'E107:')
af580a
+  call assert_fails('eval 0->(3)()', "E1275:")
af580a
+  call assert_fails('eval 0->([3])()', "E1275:")
af580a
+  call assert_fails('eval 0->({"a": 3})()', "E1275:")
af580a
+  call assert_fails('eval 0->(xxx)()', "E121:")
af580a
 endfunc
af580a
 
af580a
 func Test_not_lamda()