Christian Brabandt wrote:
> Hi,
> I got this error with vim 7.2.245 (linux) and Gvim 7.2.148 (Windows):
>
> chrisbra t41:~ [1023:139]% vim -u NONE -N -c 'for i in range(3) | redir =>
> temp[i] |echo 1| redir END'
> Vim: Caught deadly signal SEGV
>
> Press ENTER or type command to continueVim: Finished.
>
> zsh: segmentation fault vim -u NONE -N -c 'for i in range(3) | redir =>
> temp[i] |echo 1| redir END'
>
>
>
> I would have expected an error, but no SEGV. (E121: undefined variable
> or something).
>
> regards,
> Christian
I can confirm the crash with latest Vim-7.2.267 (Linux x86).
In fact, the for loop is not required to cause the crash. This is
enough to make Vim crash:
$ ./vim -u NONE -N -c 'redir => temp[0] |echo 1| redir END'
Vim: Caught deadly signal SEGV
Using gdb, I see that a NULL pointer endp is dereferenced at eval.c:2786:
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xb6bfc700 (LWP 3136)]
0x0807556e in set_var_lval (lp=0x91c69a4, endp=0x0, rettv=0xbf91e12c,
copy=0, op=0x81e556d ".") at eval.c:2786
2786 cc = *endp;
(gdb) bt
#0 0x0807556e in set_var_lval (lp=0x91c69a4, endp=0x0,
rettv=0xbf91e12c, copy=0, op=0x81e556d ".") at eval.c:2786
#1 0x080728a6 in var_redir_stop () at eval.c:1102
#2 0x080726dc in var_redir_start (name=0x91938ed "temp[0]", append=0)
at eval.c:1022
#3 0x080b05a3 in ex_redir (eap=0xbf91e220) at ex_docmd.c:8566
#4 0x080a747d in do_one_cmd (cmdlinep=0xbf91e3e0, sourcing=1,
cstack=0xbf91e3e8, fgetline=0, cookie=0x0) at ex_docmd.c:2629
#5 0x080a4cb4 in do_cmdline (cmdline=0xbf920666 "redir => temp[0]
|echo 1| redir END", getline=0, cookie=0x0, flags=11) at
ex_docmd.c:1098
#6 0x080a434d in do_cmdline_cmd (cmd=0xbf920666 "redir => temp[0]
|echo 1| redir END") at ex_docmd.c:704
#7 0x080e9b8c in exe_commands (parmp=0xbf91e784) at main.c:2697
#8 0x080e7574 in main (argc=6, argv=0xbf91e8e4) at main.c:874
(gdb) list
2781
2782 if (lp->ll_tv == NULL)
2783 {
2784 if (!check_changedtick(lp->ll_name))
2785 {
2786 cc = *endp;
2787 *endp = NUL;
2788 if (op != NULL && *op != '=')
2789 {
2790 typval_T tv;
(gdb) p endp
$1 = (char_u *) 0x0
Not sure how to fix it yet.
-- Dominique
--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_dev" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---