]> granicus.if.org Git - vim/commitdiff
updated for version 7.3.1295 v7.3.1295
authorBram Moolenaar <Bram@vim.org>
Wed, 3 Jul 2013 14:53:03 +0000 (16:53 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 3 Jul 2013 14:53:03 +0000 (16:53 +0200)
Problem:    glob() and globpath() do not handle escaped special characters
            properly.
Solution:   Handle escaped characters differently. (Adnan Zafar)

src/fileio.c
src/misc1.c
src/testdir/Make_amiga.mak
src/testdir/Make_dos.mak
src/testdir/Make_ming.mak
src/testdir/Make_os2.mak
src/testdir/Make_vms.mms
src/testdir/Makefile
src/testdir/test97.in [new file with mode: 0644]
src/testdir/test97.ok [new file with mode: 0644]
src/version.c

index b6f40166821767696f8bcf60cf5b4daa237b2560..71ecf42aead5148acfe3333720302f0c44dce677 100644 (file)
@@ -10301,7 +10301,10 @@ file_pat_to_reg_pat(pat, pat_end, allow_dirs, no_bslash)
                 * foo\,bar -> foo,bar
                 * foo\ bar -> foo bar
                 * Don't unescape \, * and others that are also special in a
-                * regexp. */
+                * regexp.
+                * An escaped { must be unescaped since we use magic not
+                * verymagic.
+                */
                if (*++p == '?'
 #ifdef BACKSLASH_IN_FILENAME
                        && no_bslash
@@ -10309,7 +10312,8 @@ file_pat_to_reg_pat(pat, pat_end, allow_dirs, no_bslash)
                        )
                    reg_pat[i++] = '?';
                else
-                   if (*p == ',' || *p == '%' || *p == '#' || *p == ' ')
+                   if (*p == ',' || *p == '%' || *p == '#'
+                                                   || *p == ' ' || *p == '{')
                        reg_pat[i++] = *p;
                    else
                    {
index a9e6c8a595f49e3783c4bfd9ca9fa946ded55c18..9581631787839ea72d379b8170b264fed9608043 100644 (file)
@@ -10457,6 +10457,54 @@ remove_duplicates(gap)
 }
 #endif
 
+static int has_env_var __ARGS((char_u *p));
+
+/*
+ * Return TRUE if "p" contains what looks like an environment variable.
+ * Allowing for escaping.
+ */
+    static int
+has_env_var(p)
+    char_u *p;
+{
+    for ( ; *p; mb_ptr_adv(p))
+    {
+       if (*p == '\\' && p[1] != NUL)
+           ++p;
+       else if (vim_strchr((char_u *)
+#if defined(MSDOS) || defined(MSWIN) || defined(OS2)
+                                   "$%"
+#else
+                                   "$"
+#endif
+                                       , *p) != NULL)
+           return TRUE;
+    }
+    return FALSE;
+}
+
+#ifdef SPECIAL_WILDCHAR
+static int has_special_wildchar __ARGS((char_u *p));
+
+/*
+ * Return TRUE if "p" contains a special wildcard character.
+ * Allowing for escaping.
+ */
+    static int
+has_special_wildchar(p)
+    char_u  *p;
+{
+    for ( ; *p; mb_ptr_adv(p))
+    {
+       if (*p == '\\' && p[1] != NUL)
+           ++p;
+       else if (vim_strchr((char_u *)SPECIAL_WILDCHAR, *p) != NULL)
+           return TRUE;
+    }
+    return FALSE;
+}
+#endif
+
 /*
  * Generic wildcard expansion code.
  *
@@ -10507,7 +10555,7 @@ gen_expand_wildcards(num_pat, pat, num_file, file, flags)
      */
     for (i = 0; i < num_pat; i++)
     {
-       if (vim_strpbrk(pat[i], (char_u *)SPECIAL_WILDCHAR) != NULL
+       if (has_special_wildchar(pat[i])
 # ifdef VIM_BACKTICK
                && !(vim_backtick(pat[i]) && pat[i][1] == '=')
 # endif
@@ -10537,7 +10585,7 @@ gen_expand_wildcards(num_pat, pat, num_file, file, flags)
            /*
             * First expand environment variables, "~/" and "~user/".
             */
-           if (vim_strchr(p, '$') != NULL || *p == '~')
+           if (has_env_var(p) || *p == '~')
            {
                p = expand_env_save_opt(p, TRUE);
                if (p == NULL)
@@ -10548,7 +10596,7 @@ gen_expand_wildcards(num_pat, pat, num_file, file, flags)
                 * variable, use the shell to do that.  Discard previously
                 * found file names and start all over again.
                 */
-               else if (vim_strchr(p, '$') != NULL || *p == '~')
+               else if (has_env_var(p) || *p == '~')
                {
                    vim_free(p);
                    ga_clear_strings(&ga);
index 5a24e6d13f5eb16d964f7fc20a4e14bd7a0ad7cf..afc4a03dd3618dbcdb375aa6d7af0107a0ebf96b 100644 (file)
@@ -33,7 +33,7 @@ SCRIPTS = test1.out test3.out test4.out test5.out test6.out \
                test76.out test77.out test78.out test79.out test80.out \
                test81.out test82.out test83.out test84.out test88.out \
                test89.out test90.out test91.out test92.out test93.out \
-               test94.out test95.out test96.out
+               test94.out test95.out test96.out test97.out
 
 .SUFFIXES: .in .out
 
@@ -146,3 +146,4 @@ test93.out: test93.in
 test94.out: test94.in
 test95.out: test95.in
 test96.out: test96.in
+test97.out: test97.in
index 7204ae9630cd864b4d8e258416f700e3320b2d20..573a1df383351dbf0120867b45df8be6a2e480e7 100644 (file)
@@ -32,7 +32,7 @@ SCRIPTS =     test3.out test4.out test5.out test6.out test7.out \
                test79.out test80.out test81.out test82.out test83.out \
                test84.out test85.out test86.out test87.out test88.out \
                test89.out test90.out test91.out test92.out test93.out \
-               test94.out test95.out test96.out
+               test94.out test95.out test96.out test97.out
 
 SCRIPTS32 =    test50.out test70.out
 
index 8bcfe890a1e40f2dfde2ad1f25b76b54713c9e35..51c64efe83be551e60345bf8e89a613a68a40383 100644 (file)
@@ -52,7 +52,7 @@ SCRIPTS =     test3.out test4.out test5.out test6.out test7.out \
                test79.out test80.out test81.out test82.out test83.out \
                test84.out test85.out test86.out test87.out test88.out \
                test89.out test90.out test91.out test92.out test93.out \
-               test94.out test95.out test96.out
+               test94.out test95.out test96.out test97.out
 
 SCRIPTS32 =    test50.out test70.out
 
index 2d111e8fb149f665c95ff2384f9440131e6de189..8c45229ca251fb0fd0dc918ae8114890f4e0ab69 100644 (file)
@@ -33,7 +33,7 @@ SCRIPTS = test1.out test3.out test4.out test5.out test6.out \
                test76.out test77.out test78.out test79.out test80.out \
                test81.out test82.out test83.out test84.out test88.out \
                test89.out test90.out test91.out test92.out test93.out \
-               test94.out test95.out test96.out
+               test94.out test95.out test96.out test97.out
 
 .SUFFIXES: .in .out
 
index 3435dfcca64cf048fd1f4fbada6d40961a8b4d76..a62b7ad4518e50b92d69cc97fb4eec0cc88c9910 100644 (file)
@@ -4,7 +4,7 @@
 # Authors:     Zoltan Arpadffy, <arpadffy@polarhome.com>
 #              Sandor Kopanyi,  <sandor.kopanyi@mailbox.hu>
 #
-# Last change:  2013 Jul 01
+# Last change:  2013 Jul 03
 #
 # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
 # Edit the lines in the Configuration section below to select.
@@ -78,7 +78,7 @@ SCRIPT = test1.out  test2.out  test3.out  test4.out  test5.out  \
         test77.out test78.out test79.out test80.out test81.out \
         test82.out test83.out test84.out test88.out test89.out \
         test90.out test91.out test92.out test93.out test94.out \
-        test95.out test96.out
+        test95.out test96.out test97.out
 
 # Known problems:
 # Test 30: a problem around mac format - unknown reason
index 85b7c4d3e787cdd53c4c4d990a24e1b423c5a790..bc525d9d1a706dd765420f3c8fb6b814069868eb 100644 (file)
@@ -29,7 +29,7 @@ SCRIPTS = test1.out test2.out test3.out test4.out test5.out test6.out \
                test79.out test80.out test81.out test82.out test83.out \
                test84.out test85.out test86.out test87.out test88.out \
                test89.out test90.out test91.out test92.out test93.out \
-               test94.out test95.out test96.out
+               test94.out test95.out test96.out test97.out
 
 SCRIPTS_GUI = test16.out
 
diff --git a/src/testdir/test97.in b/src/testdir/test97.in
new file mode 100644 (file)
index 0000000..13e9dd5
--- /dev/null
@@ -0,0 +1,17 @@
+Test whether glob()/globpath() return correct results with certain escaped
+characters.
+
+STARTTEST
+:so small.vim
+:set shell=doesnotexist
+:e test.out
+:put =glob('Xxx\{')
+:put =glob('Xxx\$')
+:w! Xxx{
+:w! Xxx\$
+:put =glob('Xxx\{')
+:put =glob('Xxx\$')
+:w
+:qa!
+ENDTEST
+
diff --git a/src/testdir/test97.ok b/src/testdir/test97.ok
new file mode 100644 (file)
index 0000000..afa96a4
--- /dev/null
@@ -0,0 +1,5 @@
+
+
+
+Xxx{
+Xxx$
index e4c6d503de2bc43a83b23f22b0c1d0f848b87e1e..d7355677377e221ae6881ec548b30259446d72b8 100644 (file)
@@ -728,6 +728,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1295,
 /**/
     1294,
 /**/