aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2020-01-26 10:21:28 -0500
committerJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2020-01-26 17:38:31 -0500
commitad272cd2d7ac6c9d28c2981169b779e146cbb5d6 (patch)
treecfd13e38d2e4503b4194b434b94fa2d6e0646d2e
parent08c5a874ab97d52e215025ccd010d68fcdf14731 (diff)
downloadrneovim-ad272cd2d7ac6c9d28c2981169b779e146cbb5d6.tar.gz
rneovim-ad272cd2d7ac6c9d28c2981169b779e146cbb5d6.tar.bz2
rneovim-ad272cd2d7ac6c9d28c2981169b779e146cbb5d6.zip
vim-patch:8.1.1144: too strict checking of the 'spellfile' option
Problem: Too strict checking of the 'spellfile' option. Solution: Allow for a path. https://github.com/vim/vim/commit/862f1e17eaf2b9c6617dfba31d8487cde462658d
-rw-r--r--src/nvim/option.c19
-rw-r--r--src/nvim/testdir/test_spell.vim5
2 files changed, 22 insertions, 2 deletions
diff --git a/src/nvim/option.c b/src/nvim/option.c
index 9168509aa8..52742c8b64 100644
--- a/src/nvim/option.c
+++ b/src/nvim/option.c
@@ -2538,6 +2538,18 @@ bool valid_spellang(const char_u *val)
return valid_name(val, ".-_,");
}
+/// Return true if "val" is a valid 'spellfile' value.
+static bool valid_spellfile(const char_u *val)
+ FUNC_ATTR_NONNULL_ALL FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
+{
+ for (const char_u *s = val; *s != NUL; s++) {
+ if (!vim_isfilec(*s) && *s != ',') {
+ return false;
+ }
+ }
+ return true;
+}
+
/// Handle string options that need some action to perform when changed.
/// Returns NULL for success, or an error message for an error.
static char_u *
@@ -3049,10 +3061,13 @@ ambw_end:
|| varp == &(curwin->w_s->b_p_spf)) {
// When 'spelllang' or 'spellfile' is set and there is a window for this
// buffer in which 'spell' is set load the wordlists.
- if (!valid_spellang(*varp)) {
+ const bool is_spellfile = varp == &(curwin->w_s->b_p_spf);
+
+ if ((is_spellfile && !valid_spellfile(*varp))
+ || (!is_spellfile && !valid_spellang(*varp))) {
errmsg = e_invarg;
} else {
- errmsg = did_set_spell_option(varp == &(curwin->w_s->b_p_spf));
+ errmsg = did_set_spell_option(is_spellfile);
}
} else if (varp == &(curwin->w_s->b_p_spc)) {
// When 'spellcapcheck' is set compile the regexp program.
diff --git a/src/nvim/testdir/test_spell.vim b/src/nvim/testdir/test_spell.vim
index 098cd957ae..94789d6ea3 100644
--- a/src/nvim/testdir/test_spell.vim
+++ b/src/nvim/testdir/test_spell.vim
@@ -392,6 +392,11 @@ func Test_zz_sal_and_addition()
call assert_equal("elekwint", SecondSpellWord())
endfunc
+func Test_spellfile_value()
+ set spellfile=Xdir/Xtest.latin1.add
+ set spellfile=Xdir/Xtest.utf-8.add,Xtest_other.add
+endfunc
+
func Test_region_error()
messages clear
call writefile(["/regions=usgbnz", "elequint/0"], "Xtest.latin1.add")