]> granicus.if.org Git - vim/commitdiff
patch 8.2.2122: Vim9: crash when sourcing vim9script early v8.2.2122
authorBram Moolenaar <Bram@vim.org>
Wed, 9 Dec 2020 16:16:59 +0000 (17:16 +0100)
committerBram Moolenaar <Bram@vim.org>
Wed, 9 Dec 2020 16:16:59 +0000 (17:16 +0100)
Problem:    Vim9: crash when sourcing vim9script early.
Solution:   Use set_option_value() instead of setting p_cpo directly.
            (closes #7441)

src/scriptfile.c
src/testdir/test_vim9_script.vim
src/version.c

index 7e5ea4c63d3096fdde31581fc31467900f31e97a..bf4cbc0ea619e78d5d723c85effb882130690c68 100644 (file)
@@ -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;
     }
 
index 7012f9e52948170ea4a8f7d683b3127ac716dbf8..72a373a31c8b8eca24a6142f0c5681ffb4577f12 100644 (file)
@@ -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
index 9bb587dff6e4555245e59820a155f11fe47b97c6..8eec20e660a02899263891ee2022624adb6c55d3 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2122,
 /**/
     2121,
 /**/