summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2016-11-25 22:04:13 +0100
committerBram Moolenaar <Bram@vim.org>2016-11-25 22:04:13 +0100
commit7554da4033498c4da0af3cde542c3e87e9097b73 (patch)
tree2b2840469dade389e038bc94fb0e9c64d25f39fe
parent031cb743ae154cfb727a9b7787bdcb61202ff1c8 (diff)
patch 8.0.0102v8.0.0102
Problem: Cannot set 'dictionary' to a path. Solution: Allow for slash and backslash. Add a test (partly by Daisuke Suzuki, closes #1279, closes #1284)
-rw-r--r--src/option.c15
-rw-r--r--src/testdir/test_options.vim15
-rw-r--r--src/version.c2
3 files changed, 26 insertions, 6 deletions
diff --git a/src/option.c b/src/option.c
index 52330f7904..5b6dbe358c 100644
--- a/src/option.c
+++ b/src/option.c
@@ -452,10 +452,11 @@ struct vimoption
#define P_NFNAME 0x400000L /* only normal file name chars allowed */
#define P_INSECURE 0x800000L /* option was set from a modeline */
#define P_PRI_MKRC 0x1000000L /* priority for :mkvimrc (setting option has
- side effects) */
+ side effects) */
#define P_NO_ML 0x2000000L /* not allowed in modeline */
#define P_CURSWANT 0x4000000L /* update curswant required; not needed when
* there is a redraw flag */
+#define P_NDNAME 0x8000000L /* only normal dir name chars allowed */
#define ISK_LATIN1 (char_u *)"@,48-57,_,192-255"
@@ -992,7 +993,7 @@ static struct vimoption options[] =
(char_u *)NULL, PV_NONE,
#endif
{(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
- {"dictionary", "dict", P_STRING|P_EXPAND|P_VI_DEF|P_ONECOMMA|P_NODUP|P_NFNAME,
+ {"dictionary", "dict", P_STRING|P_EXPAND|P_VI_DEF|P_ONECOMMA|P_NODUP|P_NDNAME,
#ifdef FEAT_INS_EXPAND
(char_u *)&p_dict, PV_DICT,
#else
@@ -5876,11 +5877,13 @@ did_set_string_option(
errmsg = e_secure;
}
- /* Check for a "normal" file name in some options. Disallow a path
- * separator (slash and/or backslash), wildcards and characters that are
- * often illegal in a file name. */
- else if ((options[opt_idx].flags & P_NFNAME)
+ /* Check for a "normal" directory or file name in some options. Disallow a
+ * path separator (slash and/or backslash), wildcards and characters that
+ * are often illegal in a file name. */
+ else if (((options[opt_idx].flags & P_NFNAME)
&& vim_strpbrk(*varp, (char_u *)"/\\*?[|;&<>\r\n") != NULL)
+ || ((options[opt_idx].flags & P_NDNAME)
+ && vim_strpbrk(*varp, (char_u *)"*?[|;&<>\r\n") != NULL))
{
errmsg = e_invarg;
}
diff --git a/src/testdir/test_options.vim b/src/testdir/test_options.vim
index 3b6f6625f6..88be8f9c5f 100644
--- a/src/testdir/test_options.vim
+++ b/src/testdir/test_options.vim
@@ -106,3 +106,18 @@ func Test_keymap_valid()
call assert_fails(":set kmp=trunc\x00name", "E544:")
call assert_fails(":set kmp=trunc\x00name", "trunc")
endfunc
+
+func Test_dictionary()
+ " Check that it's possible to set the option.
+ set dictionary=/usr/share/dict/words
+ call assert_equal('/usr/share/dict/words', &dictionary)
+ set dictionary=/usr/share/dict/words,/and/there
+ call assert_equal('/usr/share/dict/words,/and/there', &dictionary)
+ set dictionary=/usr/share/dict\ words
+ call assert_equal('/usr/share/dict words', &dictionary)
+
+ " Check rejecting weird characters.
+ call assert_fails("set dictionary=/not&there", "E474:")
+ call assert_fails("set dictionary=/not>there", "E474:")
+ call assert_fails("set dictionary=/not.*there", "E474:")
+endfunc
diff --git a/src/version.c b/src/version.c
index 449732f4a0..ed6a74e88b 100644
--- a/src/version.c
+++ b/src/version.c
@@ -765,6 +765,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 102,
+/**/
101,
/**/
100,