James -

> Patch 7.1.226 relaxed the restrictions on cmdline completion.  This
> can cause Vim to hang while performing cmdline completion if <space> is
> added to 'isfname'.
> 
>   vim -N -u NONE -c "set isfname+=3D32"
>   :r !ls /<C-l>
> 
> An infinite loop happens in set_one_cmd_context as shown by the
> following code which I've trimmed down to the relevant path.
> 
>       while (*p !=3D NUL)
>       {
>           [snip]
>           /* An argument can contain just about everything, except
>            * characters that end the command and white space. */
>           else if (c =3D=3D '|' || c =3D=3D '\n' || c =3D=3D '"' || 
> (vim_iswhite=
> (c)
> #ifdef SPACE_IN_FILENAME
>                                        && (!(ea.argt & NOSPC) || usefilter)
> #endif
>                   ))
>           {
>               while (*p !=3D NUL)
>               {
>                   [snip]
>                   if (c =3D=3D '`' || vim_isfilec_or_wc(c))
>                       break;
>                   [snip]
> **                mb_ptr_adv(p);
>               }
>               [snip]
>               p -=3D len;
>           }
>           mb_ptr_adv(p);
>       }
> 
> The code never leaves the outer while loop.  It would seem that Vim
> either shouldn't be entering the else if branch (and was the previous
> behavior) or it shouldn't be breaking out of the inner while loop so
> that the ** marked line is run.
> 
> What's currently happening is that p is decremented by len (1 in this
> case) and then incremented again immediately outside of the inner while
> loop.  So Vim loops forever examining the exact same string.

That's a bug.  Resetting "len" to zero at the start of the loop fixes
it.

Note that adding a space to 'isfname' is bad, it will break lots of
things.  Vim doesn't know where a file name starts or ends.

> I also have to wonder why os_unix.h doesn't define SPACE_IN_FILENAME.

Because in Unix file names normally don't have a space in the name.  On
MS-Windows it's much more common.  E.g., "C:/program files/".

On Unix a file name can contain any character except "/", but making
"gf" and completion work on that doesn't make sense.

- Bram

-- 
hundred-and-one symptoms of being an internet addict:
39. You move into a new house and decide to Netscape before you landscape.

 /// Bram Moolenaar -- [EMAIL PROTECTED] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///



-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to