Mercurial > vim
changeset 10416:ef5474130b0e v8.0.0102
commit https://github.com/vim/vim/commit/7554da4033498c4da0af3cde542c3e87e9097b73
Author: Bram Moolenaar <Bram@vim.org>
Date: Fri Nov 25 22:04:13 2016 +0100
patch 8.0.0102
Problem: Cannot set 'dictionary' to a path.
Solution: Allow for slash and backslash. Add a test (partly by Daisuke
Suzuki, closes https://github.com/vim/vim/issues/1279, closes https://github.com/vim/vim/issues/1284)
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Fri, 25 Nov 2016 22:15:04 +0100 |
parents | 660440b1adcf |
children | 2e7347e59ae8 |
files | src/option.c src/testdir/test_options.vim src/version.c |
diffstat | 3 files changed, 26 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- 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; }
--- 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