Skip to content

Commit 9ec7026

Browse files
committed
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)
1 parent a7a691c commit 9ec7026

3 files changed

Lines changed: 14 additions & 2 deletions

File tree

src/scriptfile.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1491,8 +1491,7 @@ do_source(
14911491
si = SCRIPT_ITEM(current_sctx.sc_sid);
14921492
if (si->sn_save_cpo != NULL)
14931493
{
1494-
free_string_option(p_cpo);
1495-
p_cpo = si->sn_save_cpo;
1494+
set_option_value((char_u *)"cpo", 0L, si->sn_save_cpo, 0);
14961495
si->sn_save_cpo = NULL;
14971496
}
14981497

src/testdir/test_vim9_script.vim

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2857,6 +2857,17 @@ def Test_invalid_sid()
28572857
delete('Xdidit')
28582858
enddef
28592859

2860+
def Test_restoring_cpo()
2861+
writefile(['vim9script', 'set nocp'], 'Xsourced')
2862+
writefile(['call writefile(["done"], "Xdone")', 'quit!'], 'Xclose')
2863+
if RunVim([], [], '-u NONE +"set cpo+=a" -S Xsourced -S Xclose')
2864+
assert_equal(['done'], readfile('Xdone'))
2865+
endif
2866+
delete('Xsourced')
2867+
delete('Xclose')
2868+
enddef
2869+
2870+
28602871
def Test_unset_any_variable()
28612872
var lines =<< trim END
28622873
var name: any

src/version.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -750,6 +750,8 @@ static char *(features[]) =
750750

751751
static int included_patches[] =
752752
{ /* Add new patch number below this line */
753+
/**/
754+
2122,
753755
/**/
754756
2121,
755757
/**/

0 commit comments

Comments
 (0)