]> granicus.if.org Git - vim/commitdiff
patch 8.0.0102 v8.0.0102
authorBram Moolenaar <Bram@vim.org>
Fri, 25 Nov 2016 21:04:13 +0000 (22:04 +0100)
committerBram Moolenaar <Bram@vim.org>
Fri, 25 Nov 2016 21:04:13 +0000 (22:04 +0100)
Problem:    Cannot set 'dictionary' to a path.
Solution:   Allow for slash and backslash.  Add a test (partly by Daisuke
            Suzuki, closes #1279, closes #1284)

src/option.c
src/testdir/test_options.vim
src/version.c

index 52330f7904d1fa6f56746274a6a7632828a6f1c6..5b6dbe358c16e75c54281ad126e1ddcf8fe32ae0 100644 (file)
@@ -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;
     }
index 3b6f6625f6aef7ce3196721af505bff6f4b04212..88be8f9c5f084ca0b9c9bc97a76fb52d2ca974e5 100644 (file)
@@ -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
index 449732f4a0518375f200395dd73816dc565901b1..ed6a74e88bde4e6e512eb9822bbf90d7425b97c4 100644 (file)
@@ -764,6 +764,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    102,
 /**/
     101,
 /**/