Package: vim
Version: 2:7.2.245-2
Severity: normal
Tags: patch

--- Please enter the report below this line. ---

Hi,

To reproduce the bug. Just create a directory with a ~ (mkdir
-p /tmp/bad~dir). Then when you do a ":chdir /tmp/bad~dir", an error
is raised "E79: Cannot expand wildcards". 
As a side effect it is not possible to use a tags file in the bad~dir
or below (/tmp/bad~dir/tags) because it will no be seen by vim.

Note I have not tested all shell but the bug appears with the tsch
shell (and not zsh for example). So you must use this option "set
shell=/bin/tcsh\ -f".

Please find attached a patch that seems solve the problem not sure it
is the good solution (and works in all situations). Maybe a solution
will be to escaped ~ like '\~' before sending to the tcsh shell.

Note: Tcsh debian version is 6.14.00-7 

Best Regards,
Gregory


--- System information. ---
Architecture: i386
Kernel:       Linux 2.6.30.3-ghost

Debian Release: squeeze/sid
  500 unstable        ftp.fr.debian.org 
    1 experimental    ftp.fr.debian.org 

--- Package information. ---
Depends                   (Version) | Installed
===================================-+-====================
vim-common        (= 2:7.2.245-2)   | 2:7.2.245-2
vim-runtime       (= 2:7.2.245-2)   | 2:7.2.245-2
libacl1               (>= 2.2.11-1) | 2.2.47-3
libc6                    (>= 2.3.4) | 2.9-25
libgpm2                 (>= 1.20.4) | 1.20.4-3.2
libncurses5     (>= 5.6+20071006-3) | 5.7+20090803-1+b1
libselinux1             (>= 2.0.85) | 2.0.85-1


Package's Recommends field is empty.

Suggests         (Version) | Installed
==========================-+-===========
ctags                      | 
vim-doc                    | 
vim-scripts                | 20090211-1





--- misc1.c	2009-08-19 12:24:24.000000000 +0200
+++ vim-7.2.245/src/misc1.c	2009-08-19 12:26:03.000000000 +0200
@@ -9199,8 +9199,9 @@ gen_expand_wildcards(num_pat, pat, num_f
 	{
 	    /*
 	     * First expand environment variables, "~/" and "~user/".
+             * Only expand ~ when it is a first caracter
 	     */
-	    if (vim_strpbrk(p, (char_u *)"$~") != NULL)
+	    if (vim_strpbrk(p, (char_u *)"$") != NULL || p[0] == '~')
 	    {
 		p = expand_env_save_opt(p, TRUE);
 		if (p == NULL)
@@ -9211,7 +9212,7 @@ gen_expand_wildcards(num_pat, pat, num_f
 		 * variable, use the shell to do that.  Discard previously
 		 * found file names and start all over again.
 		 */
-		else if (vim_strpbrk(p, (char_u *)"$~") != NULL)
+		else if (vim_strpbrk(p, (char_u *)"$") != NULL || p[0] == '~')
 		{
 		    vim_free(p);
 		    ga_clear_strings(&ga);

Reply via email to