vim-patch:8.2.2289: Vim9: 'cpo' can become empty (#19887)

Problem:    Vim9: 'cpo' can become empty.
Solution:   Use empty_option instead of an empty string.  Update quickfix
            buffer after restoring 'cpo'.  (closes vim/vim#7608)
e5a2dc87fd

Omit test as it is Vim9 script.
This commit is contained in:
zeertzjq
2022-08-22 12:02:45 +08:00
committed by GitHub
parent d5cc161dea
commit 4f6d0d6da9
5 changed files with 30 additions and 9 deletions

View File

@@ -588,7 +588,7 @@ buf_T *tv_get_buf(typval_T *tv, int curtab_only)
int save_magic = p_magic;
p_magic = true;
char *save_cpo = p_cpo;
p_cpo = "";
p_cpo = (char *)empty_option;
buf_T *buf = buflist_findnr(buflist_findpat((char *)name, (char *)name + STRLEN(name),
true, false, curtab_only));
@@ -4893,7 +4893,7 @@ static void find_some_match(typval_T *const argvars, typval_T *const rettv,
// Make 'cpoptions' empty, the 'l' flag should not be used here.
char *save_cpo = p_cpo;
p_cpo = "";
p_cpo = (char *)empty_option;
rettv->vval.v_number = -1;
switch (type) {
@@ -7413,6 +7413,11 @@ long do_searchpair(const char *spat, const char *mpat, const char *epat, int dir
p_cpo = save_cpo;
} else {
// Darn, evaluating the {skip} expression changed the value.
// If it's still empty it was changed and restored, need to restore in
// the complicated way.
if (*p_cpo == NUL) {
set_option_value("cpo", 0L, save_cpo, 0);
}
free_string_option((char_u *)save_cpo);
}
@@ -8167,7 +8172,7 @@ static void f_split(typval_T *argvars, typval_T *rettv, FunPtr fptr)
// Make 'cpoptions' empty, the 'l' flag should not be used here.
char *save_cpo = p_cpo;
p_cpo = "";
p_cpo = (char *)empty_option;
const char *str = tv_get_string(&argvars[0]);
const char *pat = NULL;