Subject: [Vim-vms] Vim 6.2 crash

From: Coen Engelbarts <[email-masked]>
Date: Tue, 13 Jan 2004 16:47:25 +0100

Hi all,

For the vim-dev readers:
Does the file name expansion use vim's regexp code?
Can you tell me which function or source file does the file name expansion?

That's rather direct, but I'm a bit worried that you will all stop 
reading after the word "VMS" ;-)

I think I found a new bug in vim/VMS 6.2.106 (I use the downloaded
binary from http://www.polarfox.com/vim/).
The following actions consistently crash vim:
In the VIM directory, start vim and type:
     :n syntax/<CTRL-D>
For a few moments the prompt will show
     :n syntax/...
and finally
     :n \[.syntax]2html.vim
If you now press <CTRL-D> or <TAB>, vim will crash:
     Vim: Caught deadly signal BUS

     Vim: Finished.

In short, the command:
     :n \[.syntax]<CTRL-D>
crashes vim on VMS.

I do not understand how/why/where vim inserts the '\' before the '[' and 
not before the ']'. I don't think that vim needs it to understand VMS 
path names.
AFAIK, escaping '[' to '\[' is only necessary in regular expressions. 
Does the file name expansion use vim's regexp code?

The function vms_unix_mixed_filespec() in os_vms.c expands pathnames 
from Unix to VMS format, but it does not seem to insert a '\'.
The line
     *out++ = '[';	    /* Yes, denote a Vms subdirectory */
looked suspicious to me, but I think the *out++ should correctly write 
'[' before incrementing 'out' (see e.g. 
http://www.eskimo.com/~scs/C-faq/q4.3.html)

Does anybody know what's happening?

Thanks in advance,

Coen

---

From: Bram Moolenaar <[email-masked]>
Date: Tue, 13 Jan 2004 17:09:33 +0100

> Can you tell me which function or source file does the file name expansion?

Yes, the regexp engine is used for finding matching file names.  Except
when a machine-specific function should be used.  gen_expand_wildcards()
is the central function.

> Does the file name expansion use vim's regexp code?

Using [] is a generic thing in filenames, just like using "*" and "?".
Therefore a backslash is needed for a literal "[".  It's not needed for
the "]", because it only has a special meaning after a "[".

> Does anybody know what's happening?

The escaping is done in ExpandEscape().

Anyway, even when inserting a backslash is not appropriate (which I
still think is right), Vim should not crash.  I hope you can find out
where the crash happens.

-- 
hundred-and-one symptoms of being an internet addict:
269. You receive an e-mail from the wife of a deceased president, offering
     to send you twenty million dollar, and you are not even surprised.

 /// Bram Moolenaar -- [email-masked] -- http://www.Moolenaar.net   \\\
///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
 \\\  Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html  ///