changeset 23289:ac701146c708 v8.2.2190

patch 8.2.2190: Vim9: crash when compiled with EXITFREE Commit: https://github.com/vim/vim/commit/077a42318c20ec9e71250edd8c4346edef72281b Author: Bram Moolenaar <Bram@vim.org> Date: Tue Dec 22 18:33:27 2020 +0100 patch 8.2.2190: Vim9: crash when compiled with EXITFREE Problem: Vim9: crash when compiled with EXITFREE. Solution: Check that df_ufunc is not NULL.
author Bram Moolenaar <Bram@vim.org>
date Tue, 22 Dec 2020 18:45:03 +0100
parents b8de37e308f2
children bbda7e5d2c51
files src/testdir/test_vim9_func.vim src/version.c src/vim9compile.c
diffstat 3 files changed, 28 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -2011,5 +2011,27 @@ def Test_opfunc()
   nunmap <F3>
 enddef
 
+" this was crashing on exit
+def Test_nested_lambda_in_closure()
+  var lines =<< trim END
+      vim9script
+      def Outer()
+          def g:Inner()
+              echo map([1, 2, 3], {_, v -> v + 1})
+          enddef
+          g:Inner()
+      enddef
+      defcompile
+      writefile(['Done'], 'XnestedDone')
+      quit
+  END
+  if !RunVim([], lines, '--clean')
+    return
+  endif
+  assert_equal(['Done'], readfile('XnestedDone'))
+  delete('XnestedDone')
+enddef
+
+
 
 " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2190,
+/**/
     2189,
 /**/
     2188,
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -8081,9 +8081,10 @@ delete_instr(isn_T *isn)
 	    {
 		dfunc_T *dfunc = ((dfunc_T *)def_functions.ga_data)
 					       + isn->isn_arg.funcref.fr_func;
-
-		if (func_name_refcount(dfunc->df_ufunc->uf_name))
-		    func_ptr_unref(dfunc->df_ufunc);
+		ufunc_T *ufunc = dfunc->df_ufunc;
+
+		if (ufunc != NULL && func_name_refcount(ufunc->uf_name))
+		    func_ptr_unref(ufunc);
 	    }
 	    break;