changeset 23152:1c94e4c9db00 v8.2.2122

patch 8.2.2122: Vim9: crash when sourcing vim9script early Commit: https://github.com/vim/vim/commit/9ec7026f24e9ac51654300e32afd2b7540cab5f8 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Dec 9 17:16:59 2020 +0100 patch 8.2.2122: Vim9: crash when sourcing vim9script early Problem: Vim9: crash when sourcing vim9script early. Solution: Use set_option_value() instead of setting p_cpo directly. (closes #7441)
author Bram Moolenaar <Bram@vim.org>
date Wed, 09 Dec 2020 17:30:04 +0100
parents 7cd2122d2daf
children a40d2987b230
files src/scriptfile.c src/testdir/test_vim9_script.vim src/version.c
diffstat 3 files changed, 14 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/scriptfile.c
+++ b/src/scriptfile.c
@@ -1491,8 +1491,7 @@ almosttheend:
     si = SCRIPT_ITEM(current_sctx.sc_sid);
     if (si->sn_save_cpo != NULL)
     {
-	free_string_option(p_cpo);
-	p_cpo = si->sn_save_cpo;
+	set_option_value((char_u *)"cpo", 0L, si->sn_save_cpo, 0);
 	si->sn_save_cpo = NULL;
     }
 
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -2857,6 +2857,17 @@ def Test_invalid_sid()
   delete('Xdidit')
 enddef
 
+def Test_restoring_cpo()
+  writefile(['vim9script', 'set nocp'], 'Xsourced')
+  writefile(['call writefile(["done"], "Xdone")', 'quit!'], 'Xclose')
+  if RunVim([], [], '-u NONE +"set cpo+=a" -S Xsourced -S Xclose')
+    assert_equal(['done'], readfile('Xdone'))
+  endif
+  delete('Xsourced')
+  delete('Xclose')
+enddef
+
+
 def Test_unset_any_variable()
   var lines =<< trim END
     var name: any
--- 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 */
 /**/
+    2122,
+/**/
     2121,
 /**/
     2120,