On Tuesday, January 28, 2014 1:02:20 AM UTC+4, Daniel Hahler wrote:
> Hello,
>
> I have experienced a crash issue between vdebug and the easytags plugin [1],
> and came up with the following code to reproduce it.
>
> Test case:
>
> 1. Create a file (e.g. /tmp/vimrc) with the following contents.
>
> set nocp
> " set rtp=./bundle/vdebug
> "
> " From easytags: this try block triggers a segfault when
> Ctrl-C'ing
> " vdebug's VdebugStart.
> try
> " The point of this code is to do something completely
> innocent while making
> " sure the vim-misc plug-in is installed. We
> specifically don't use Vim's
> " exists() function because it doesn't load auto-load
> scripts that haven't
> " already been loaded yet (last tested on Vim 7.3).
> call type(g:xolox#misc#version)
> catch
> endtry
>
>
> python << EOF
> import time, vim
> def eval_loop_getchar():
> try:
> while True:
> vim.eval('getchar(0)')
> time.sleep(0.5)
> except:
> pass
> EOF
>
> " Crashes on Ctrl-C
> command! EvalLoop python eval_loop_getchar()
Does not work with “something completely innocent”. Does work if exception in
:try occurs (i.e. when vim-misc is not in runtimepath) or if I replace
/tmp/vimrc with the following:
set nocp
set rtp=
set noloadplugins
try
throw 'abc'
catch
endtry
python << EOF
import time, vim
def eval_loop_getchar():
try:
while True:
vim.eval('getchar(0)')
time.sleep(0.5)
except:
pass
EOF
" Crashes on Ctrl-C
command! EvalLoop python eval_loop_getchar()
>
> 2. Start Vim using `vim -u /tmp/vimrc`.
> 3. Call the EvalLoop command: `:EvalLoop`
> 4. Press Ctrl-C to cancel it.
>
>
> The backtrace looks as follows:
>
> 0x00007ffff507bf77 in __GI_raise (sig=sig@entry=6) at
> ../nptl/sysdeps/unix/sysv/linux/raise.c:56
> 56 ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or
> directory.
> (gdb) bt
> #0 0x00007ffff507bf77 in __GI_raise (sig=sig@entry=6) at
> ../nptl/sysdeps/unix/sysv/linux/raise.c:56
> #1 0x00007ffff507f5e8 in __GI_abort () at abort.c:90
> #2 0x00007ffff50b94fb in __libc_message (do_abort=do_abort@entry=2,
> fmt=fmt@entry=0x7ffff51cd240 "*** Error in `%s': %s: 0x%s ***\n")
> at ../sysdeps/unix/sysv/linux/libc_fatal.c:199
> #3 0x00007ffff50c44c6 in malloc_printerr (action=3, str=0x7ffff51cd5b8
> "munmap_chunk(): invalid pointer", ptr=<optimized out>) at malloc.c:4923
> #4 0x000000000050b518 in vim_free (x=0x7ffff7fc89c8) at misc2.c:1744
> #5 0x00000000004a5fc9 in discard_exception (excp=0x9072e0,
> was_finished=0) at ex_eval.c:640
> #6 0x00000000004a601f in discard_current_exception () at ex_eval.c:653
> #7 0x000000000061977e in VimTryEnd () at if_py_both.h:562
> #8 0x000000000061a201 in VimEval (self=0x0, args=0x7ffff7eb3310) at
> if_py_both.h:820
> #9 0x00007fffef7abad4 in PyEval_EvalFrameEx () from
> /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0
> #10 0x00007fffef7aba59 in PyEval_EvalFrameEx () from
> /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0
> #11 0x00007fffef7adb4d in PyEval_EvalCodeEx () from
> /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0
> #12 0x00007fffef7ade32 in PyEval_EvalCode () from
> /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0
> #13 0x00007fffef6da5c9 in PyRun_StringFlags () from
> /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0
> #14 0x000000000062275e in run_cmd (cmd=0xa62447 "eval_loop_getchar()",
> arg=0x7fffffffb0b0, pygilstate=0x7fffffffafb4) at if_py_both.h:5052
> #15 0x000000000062588d in DoPyCommand (cmd=0xa62447
> "eval_loop_getchar()", init_range=0x6226d8 <init_range_cmd>, run=0x62272a
> <run_cmd>, arg=0x7fffffffb0b0)
> at if_python.c:1023
> #16 0x000000000062592e in ex_python (eap=0x7fffffffb0b0) at
> if_python.c:1067
> #17 0x0000000000496441 in do_one_cmd (cmdlinep=0x7fffffffb1d0,
> sourcing=1, cstack=0x7fffffffb2c0, fgetline=0x4ac54d <getexline>, cookie=0x0)
> at ex_docmd.c:2695
> #18 0x00000000004939a4 in do_cmdline (cmdline=0xa62410 "python
> eval_loop_getchar()", fgetline=0x4ac54d <getexline>, cookie=0x0, flags=11) at
> ex_docmd.c:1127
> #19 0x000000000049d0f1 in do_ucmd (eap=0x7fffffffb8c0) at
> ex_docmd.c:6325
> #20 0x000000000049640b in do_one_cmd (cmdlinep=0x7fffffffb9e0,
> sourcing=0, cstack=0x7fffffffbad0, fgetline=0x4ac54d <getexline>, cookie=0x0)
> at ex_docmd.c:2686
> #21 0x00000000004939a4 in do_cmdline (cmdline=0x0, fgetline=0x4ac54d
> <getexline>, cookie=0x0, flags=0) at ex_docmd.c:1127
> #22 0x0000000000524836 in nv_colon (cap=0x7fffffffc050) at normal.c:5459
> #23 0x000000000051d35e in normal_cmd (oap=0x7fffffffc0f0, toplevel=1)
> at normal.c:1197
> #24 0x000000000063f0d3 in main_loop (cmdwin=0, noexmode=0) at
> main.c:1329
> #25 0x000000000063e9df in main (argc=3, argv=0x7fffffffc3f8) at
> main.c:1020
>
>
> While looking at Vim's code I have noticed a separate block for verbose
> output.
> When calling the `VdebugStart` command from vdebug, which also triggers
> this, using `99verb VdebugStart`, the backtrace looks slightly
> different:
>
> #0 __strlen_sse2_pminub () at
> ../sysdeps/x86_64/multiarch/strlen-sse2-pminub.S:38
> #1 0x00000000004f7074 in vim_vsnprintf (str=0x8fd790 "Exception
> discarded: already exists for \200kb", str_m=1025, fmt=0x6536d0 "Exception
> discarded: %s",
> ap=0x7fffffff9a98, tvs=0x0) at message.c:4371
> #2 0x00000000004f11ae in smsg (s=0x6536d0 "Exception discarded: %s")
> at message.c:410
> #3 0x00000000004a5f35 in discard_exception (excp=0x12cb4d0,
> was_finished=0) at ex_eval.c:624
> #4 0x00000000004a601f in discard_current_exception () at ex_eval.c:653
> #5 0x000000000061977e in VimTryEnd () at if_py_both.h:562
>
> It seems like the try/catch blocks in VimScript/Python conflict somehow,
> or rather cause Vim to use invalid excp pointers?!
>
> This is with Vim 7.4.160.
>
> 1: https://github.com/joonty/vdebug/issues/134
>
>
> Best regards,
> Daniel.
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.